我對動態分配的靜態全局對象有非常具體的問題。在我的項目中,我有幾個對象,我需要在整個應用程序生命週期的各個線程中訪問各個線程。我想在應用程序初始化時創建並在應用程序退出時破壞它。所以,我想下面,全局靜態動態分配對象C++
頭文件:MyObjectFactory.h
class MyObjectFactory{
public:
static MyObject* GetMyObject();
};
源文件:MyObjectFactory.cpp
static MyObject* gMyObject = 0;
MyObject* MyObjectFactory::GetMyObject(){
if(gMyObject == 0)
{
gMyObject = new MyObject();
}
return gMyObject;
}
此代碼看起來工作,但我想清楚一些事情。
- 對象將只被創建一次,然後將返回對象的引用。 (我想這是因爲MyObject封裝了像文本文件這樣的少量系統資源)
- MyObject在Application退出時被破壞。
- 在哪裏會創建對象堆(因爲我使用新的)或全局內存(因爲我使用靜態)?還是我違反任何面向對象的原則?
- 可以從多個線程調用MyObjectFactory :: GetMyObject()嗎?
- 這是一個有點類似於Singleton的好方法嗎?
請讓我知道您的意見。
非常感謝你!
'MyObject *'是一個指針,而不是一個引用... –
無論是「靜態」還是「動態」,你都不能同時擁有這兩者。 –
是否有特定的要求,該對象是使用'new'創建的?否則,只要使它成爲全局'MyObject theObject;'。 –