0
我已經編寫了下面的代碼,並且有關內存分配及其在多線程環境中的使用的一些問題。工廠模式(C++)和多線程中的靜態對象
類ClsFactory
基於id
(未示出)返回靜態對象。
如何在程序終止之前釋放分配給此靜態對象的內存?如果我的理解正確,使用
std::auto_ptr
,將把所有權轉交給main
中的auto_ptr
..我試圖避免這種情況。鑑於我可以在程序開始時創建所有必需的單例(例如
Cls
實例),在產生線程之前,在這裏使用單例會有什麼問題嗎?
總之,我希望使用工廠獲取生成線程之前創建的單例,然後在並行任務完成後刪除單例。
在此先感謝!
編輯:我正在閱讀有關依賴注入在這個論壇的東西。如果我在下面說明的代碼有更好的設計,我將不勝感激代碼示例。
class Cls {
public:
Cls(){};
~Cls(){};
void doSomething();
};
class ClsFactory {
private:
static Cls* c;
//static ClsChild1 c1;
public:
static Cls* make(int id);
//static Cls* makeChild1();
};
void Cls::doSomething(){
cout<<"In Cls::doSomething()"<<endl;
}
Cls* ClsFactory::c = NULL;
Cls* ClsFactory::make(int id){
// arg id not yet used...
cout<<"Inside ClsFactory::make"<<endl;\
if(c == NULL){
c = new Cls();
}
return c;
}
int main(){
Cls* c;
int id = 100;
c = ClsFactory::make(id);
c->doSomething();
}
關於第一點,你不應該釋放它。除非在程序運行時需要釋放它。當程序退出時,它將被系統自動釋放。 – 2012-03-25 09:30:47