Meyers singleton在上次使用之前进行了销毁



我在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
}
};

相关内容

  • 没有找到相关文章

最新更新