首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meyers单例销毁早于上次使用

Meyers单例销毁早于上次使用
EN

Stack Overflow用户
提问于 2022-04-27 17:54:20
回答 1查看 61关注 0票数 0

我在Ubuntu上的动态库A.so中以这种方式实现Meyers singleton时遇到了问题:

代码语言:javascript
复制
class Singleton
{
/*some functionality*/
}

Singleton& getSingleton(); // in header file

Singleton& getSingleton() // in .cpp file
{
    static Singleton value;
    return value;
}

函数getSingleton()other库B.so类型的对象的构造函数和析构函数中调用,如下所示:

代码语言:javascript
复制
class User
{
    User()
    {
        getSingleton().addSmth();
    }
    ~User()
    {
        getSingleton().removeSmth();
    }
    /*some other functionality*/
};

类用户的对象创建为静态对象,该对象是B.so中某些函数的静态对象。

因此,在从其他Singleton类的析构函数调用之前,我面临着销毁User对象的问题。

我的项目有多个库,它是在Ubuntu20.04上用CMake和gcc-10.3构建的.我需要帮助修复Singleton的对象生命周期

我在Windows 10上的Visual中检查了相同的项目,并且运行良好

EN

回答 1

Stack Overflow用户

发布于 2022-04-27 18:01:38

请记住,破坏的顺序是相反的建筑。因此,您必须确保在使用Singleton的其他静态对象(让我们称之为SingletonClient)之前初始化它。所以,就像这样:

代码语言:javascript
复制
struct SingletonClient {
  SingletonClient() {
    getSingleton(); // makes sure the other object is constructed before this one
  }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72033277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档