我得到奇怪的行爲從C++構造函數,並需要澄清請。最近,我想利用Singleton模式。在線搜索示例並修改代碼以滿足需要後,我遇到了意外的行爲。只需在main()開始之前調用構造函數。爲了節省你的時間,通過代碼,這是4班。我只需要main.cpp,First.cpp,Second.cpp,Third.cpp和Singleton.cpp。C++全局對象構造函數與Vs.主要調用序列
在main.cpp中
int main()
{
cout << "Inside main()" << endl;
cout<<"val = "<<Singleton::Instance()->callThem()<<endl;
delete Singleton::Instance();
return 0;
}
呼叫的順序是: 主() - >的Singleton :: callThem() - >首先:: callFirst() - >第二:: callSecond() - >第三:: callThird()
Singleton.cpp
#include "singleton.h"
#include <iostream>
First first; //source of the problem
Singleton::Singleton()
{
std::cout<<"Singleton Constructor"<<std::endl;
}
Singleton::~Singleton()
{
std::cout<<"Singleton Destructor"<<std::endl;
}
Singleton* Singleton::m_pInstance = NULL;
Singleton* Singleton::Instance()
{
if (!m_pInstance)
{
m_pInstance = new Singleton;
}
return m_pInstance;
}
int Singleton::callThem()
{
return first.callFirst();
}
輸出如下:
Third Constructor
Second Constructor
First Constructor
Inside main()
Third Constructor
Second Constructor
First Constructor
Singleton Constructor
val = 3
Singleton Destructor
First Destructor
Second Destructor
Third Constructor
First Destructor
Second Destructor
Third Constructor
在Inside main()
之前如何調用構造函數?不是主要()執行開始?
如果我刪除First first; //source of the problem
,打印出的第一行是Inside main()
,沒有在main()之前調用的構造函數。希望你的澄清。
[C++:何時(以及如何)調用C++全局靜態構造函數?](http://stackoverflow.com/questions/1271248/c-when-and-how-are-c-global-static -constructors-called) –
據我的經驗,全球ctors的序列無法控制,可以從一個構建變爲另一個構建,這會嚴重影響您的測試......您如何確認您已經測試過交付給您的客戶的順序?我一起工作的一個團隊完全不允許這個挑戰。 –