如果你想在下一次輸入相同的函數時再次訪問相同的C++對象,你可以在函數內聲明它們爲static
。 這將使每個函數共享調用一組(靜態)變量。
如果多個函數需要訪問相同的對象,則可以在命名空間範圍內(任何函數或類之外)定義它們。所有訪問這些對象的函數的調用將共享相同的全局變量。
如果您不想隱式共享通過使其成爲全局或static
而隱含的實例,那麼最好的選擇(無論如何,最好的選擇)是在類的周圍編寫一個C封裝器,並使用create/destroy函數動態分配類的一個實例。 例如:
// x.hpp
class X {
public:
X(int);
void foo();
};
// x_wrapper.h
extern "C" {
void* create_x(int arg);
void destroy_x(void* anX);
void x_foo(void* anX);
}
// x_wrapper.cpp
#include "x.hpp"
#include "x_wrapper.h"
void* create_x(int arg) {
return new X(arg);
}
void destroy_x(void* anX) {
X* self = (X*)anX;
delete self;
}
void x_foo(void* anX) {
X* self = (X*)anX;
return self->foo();
}
'new'? (另外,這與Fortran有什麼關係?) – melpomene
因此,它們是在堆棧上創建的,然後在函數完成時被銷燬?把它們放在堆上(使用'new',但最好避免直接用一些包裝器來使用它),然後在某處保存指向它們的指針。 – BoBTFish