我有一个Singleton类:
// in global space
TNCManager *TNCManager::_globalInstance = new TNCManager();
为什么TNCManager
的构造函数在main()
函数之前执行?
答案 0 :(得分:1)
为什么TNCManager的构造函数在
main()
函数之前执行?
在main()
执行之前,将实例化所有全局静态分配的对象。
因此,使用new TNCManager()
调用构造函数。
惯用的方法,即在任何访问(懒惰实例化)之前避免构造:
// in class space
class TNCManager {
public:
TNCManager& instance() {
static TNCManager theInstance;
return theInstance;
}
// ...
};
详情请见here。
答案 1 :(得分:-1)
实际上,因为main()可能并且应该能够使用TCNManager。应用程序的工作方式是分配内存,加载代码和数据,初始化存储,然后调用_main()。在C ++之前,初始化数据只需将初始数据复制到存储位置。对于类,这涉及调用构造函数。