main()之前的类的构造方法(C ++)

时间:2017-01-31 21:31:02

标签: c++

我有一个Singleton类:

// in global space
TNCManager *TNCManager::_globalInstance = new TNCManager();

为什么TNCManager的构造函数在main()函数之前执行?

2 个答案:

答案 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 ++之前,初始化数据只需将初始数据复制到存储位置。对于类,这涉及调用构造函数。