我试图在 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/