我在Ubuntu上的动态库A.so中遇到了Meyers singleton的问题:
class Singleton
{
/*some functionality*/
}
Singleton& getSingleton(); // in header file
Singleton& getSingleton() // in .cpp file
{
static Singleton value;
return value;
}
函数getSingleton()
在其他库B的类型为User
的对象的构造函数和析构函数中调用。因此,如下所示:
class User
{
User()
{
getSingleton().addSmth();
}
~User()
{
getSingleton().removeSmth();
}
/*some other functionality*/
};
User类的对象被创建为B.so.中某个函数的静态对象
因此,在从其他User
类的析构函数调用Singleton
对象之前,我面临着销毁它的问题。
我的项目有多个库,它是用CMake和gcc-10.3在Ubuntu 20.04上构建的。我需要帮助修复Singleton的对象寿命
我在Windows 10上的Visual Studio中检查了相同的项目,它运行良好
请记住,破坏的顺序与构建的顺序相反。因此,您必须确保Singleton
在使用它的其他静态对象(我们称之为SingletonClient
)之前初始化。所以,像这样的东西:
struct SingletonClient {
SingletonClient() {
getSingleton(); // makes sure the other object is constructed before this one
}
};