c++ - 单例执行顺序

标签 c++ windows cygwin singleton

我试图在 Windows 和 cygwin(linux) 上执行一些代码 (c++),发现单例类的执行存在差异。 由于我的代码依赖于其他单例类,因此它在功能上可以在 linux 下正常运行,但在 windows 下却无法正常运行,有时反之亦然。

请看下面的顺序:

Posix:

 Singleton : UniqueIdService
 Singleton : MonitorServer
MonitorServer : Waiting for Monitor Client connection....
 Singleton : ManagerServer
ManagerServer : Waiting for Tester Client connection....
 Singleton : EventAggregator
 Singleton : DataAggregator
 Singleton : CounterService
 Singleton : AppletManager
 Singleton : SubService
 Singleton : PubService
 main

Windows:

 Singleton : AppletManager
 Singleton : PubService
 Singleton : SubService
 Singleton : CounterService
 Singleton : DataAggregator
 Singleton : EventAggregator
 Singleton : ManagerServer
ManagerServer : Waiting for Tester Client connection....
 Singleton : MonitorServer
MonitorServer : Waiting for Monitor Client connection....
 Singleton : UniqueIdService
 main

是否有一种方法或机制可以跨平台对这些执行进行排序?

代码示例。 小程序管理器.cpp:

AppletManager *AppletManager::instance = new AppletManager();
AppletManager::AppletManager(void)
{
    printf("\n Singleton : AppletManager");
}

小程序管理器.h

class AppletManager
{
public:
    static AppletManager *getInstance(){
        assert(instance != NULL);
        return instance;
    }
    ~AppletManager();

private:
    AppletManager();
    static  AppletManager *instance;
};

UniqueIdService.cpp:

UniqueIdService *UniqueIdService::instance = new UniqueIdService();

UniqueIdService::UniqueIdService()
{
    printf("\n Singleton : UniqueIdService");
    uniqueId = 0;
    appletId = 0;
    funcblocId = 0;
    eventId = 0;
}

UniqueIdService.h:

class UniqueIdService
{
public:
    static UniqueIdService *getInstance(){
        assert(instance != NULL);
        return instance;
    }
    ~UniqueIdService();
private:
    UniqueIdService();
    static  UniqueIdService *instance;
};

最佳答案

在 C++ 中实现单例的最佳方式是这样的:

A& getInstanceA() {
    static A a;
    return a;
}

这是线程安全的,没有初始化顺序问题。

关于c++ - 单例执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299690/

相关文章:

c++ - 是否正则表达式(获取不是所有满足正则表达式的文本)

c++ - 电源故障后 Windows 操作系统中的文件损坏

c++ - 有没有办法获取正在运行或新打开的资源管理器窗口的IExplorerBrowser接口(interface),以便后续调用BrowseToXXX?

java - 安装 Hadoop 时出错

cygwin - cygwin 中的 sys/resource.h

cygwin - Git-bash (Cygwin) 和 vagrant-berkshelf

c++ - 在 Eclipse CDT 中找不到头文件

c++ - 用户空间和内核空间进程中的一组信号处理程序

c++ - QML 中属性绑定(bind)评估的顺序和方式

python - 如何在Python中获取退出代码?