我有一個foo類的私有靜態成員變量(std::vector<double> values
)。有一個foo封裝的對象(接口類和實現類成語)。這是頭文件「foo.h中」:dll中靜態成員變量的生存期
class foo
{
public:
foo();
~foo();
private:
static std::vector<double> values;
};
而且定義文件「Foo.cpp中」:
#include "foo.h"
std::vector<double> foo::values;
foo::foo()
{
values.resize(10UL);
}
foo::~foo()
{
for (auto& v :values)
{
v = 99.9;
}
}
富是DLL,在那裏我有我的接口類(文件內部構造'interface.h'):
class interface
{
public:
interface();
~interface();
foo myFoo;
};
extern "C" foo* getFooObject();
和getter函數在我的 'interface.cpp' 文件:
#include "interface.h"
interface::interface(){}
interface::~interfacet(){}
interface myInterface;
extern "C"
{
foo* getFooObject()
{
return &myInterface.myFoo;
}
}
在我的主程序中,我使用::LoadLibrary(libraryName)
(Windows操作系統)加載dll。當我執行::FreeLibrary(libraryHandle)
並在析構函數中設置斷點時~foo()
variables
似乎已經被破壞。有人可以幫助我在靜態成員變量的生命期在DLL中?如何防止調用析構函數時靜態成員變量已被銷燬?
預先感謝您。
可能是一個類似的問題:
c++ Static variables in dynamic DLL lifetime. or why they dead?
我使用Visual Studio 2013與英特爾Parallel Studio XE 2016
你的問題沒有解釋'foo'是如何構建的。它是在DLL內部構建的,並通過工廠函數或getter暴露出來?或者,也許有一個單一的靜態實例'foo'裏面的dll得到返回莫名其妙? –
你不能阻止,必須在FreeLibrary之前調用〜foo()。 – KonstantinL
@RudolfsBundulis:感謝您的評論。我編輯了我的問題並添加了界面以顯示foo是如何構建和暴露的。 –