I have a private static member variable of a class foo (std::vector<double> values
). There is one object of foo capsulated in a dll (interface class and implementation class idiom). This is the header file 'foo.h':
class foo
{
public:
foo();
~foo();
private:
static std::vector<double> values;
};
And the definition file 'foo.cpp':
#include "foo.h"
std::vector<double> foo::values;
foo::foo()
{
values.resize(10UL);
}
foo::~foo()
{
for (auto& v :values)
{
v = 99.9;
}
}
Foo is constructed inside the dll, where I have my interface class (file 'interface.h'):
class interface
{
public:
interface();
~interface();
foo myFoo;
};
extern "C" foo* getFooObject();
And a getter function in my 'interface.cpp' file:
#include "interface.h"
interface::interface(){}
interface::~interfacet(){}
interface myInterface;
extern "C"
{
foo* getFooObject()
{
return &myInterface.myFoo;
}
}
In my main programm I load the dll with ::LoadLibrary(libraryName)
(Windows OS). When I perform ::FreeLibrary(libraryHandle)
and set a breakpoint in the destructor ~foo()
variables
seems already destroyed. Can somebody help me with the lifetime of static member variables in dlls? How can I prevent that static member variables are already destroyed when the destructor is called?
Thank you in advance.
Probably a similar question:
c++ Static variables in dynamic DLL lifetime. or why they dead?
I use Visual Studio 2013 with the Intel Parallel Studio XE 2016.