Пожалуйста, рассмотрите следующий пример кода. Мой вопрос: где Foo :: bar хранится в памяти? Хранится ли он в хранилище программы c, в которое скомпилировано main. cpp? Если это так, что происходит, когда myDll.so выгружается?
//myDll.hpp
//class definitions
class Bar
{
public:
Bar() = default;
};
class Foo
{
public:
static Bar bar;
};
//declaring free function to be exported
extern "C" Bar* getBar();
//myDll.cpp
#include "myDll.hpp"
//initializing static member variable
Bar Foo::bar;
//definition of exported function
Bar* getBar()
{
return &(Foo::bar);
}
Предположим, что myDll. cpp преобразован в myDll.so, например: g++ -shared -fPIC -o myDll.so myDll.cpp
, и он динамически загружается следующим образом:
//main.cpp
void* handle = dlopen( "/path/to/dll/myDll.so", RTLD_NOW);
// do stuff with handle...
dlclose( handle );
Что происходит при вызове dlclose ()? Foo :: bar go выходит за рамки сразу?