2012-03-25 22 views
0

我已經編寫了下面的代碼,並且有關內存分配及其在多線程環境中的使用的一些問題。工廠模式(C++)和多線程中的靜態對象

ClsFactory基於id(未示出)返回靜態對象。

  1. 如何在程序終止之前釋放分配給此靜態對象的內存?如果我的理解正確,使用std::auto_ptr,將把所有權轉交給main中的auto_ptr ..我試圖避免這種情況。

  2. 鑑於我可以在程序開始時創建所有必需的單例(例如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(); 
} 
+0

關於第一點,你不應該釋放它。除非在程序運行時需要釋放它。當程序退出時,它將被系統自動釋放。 – 2012-03-25 09:30:47

回答

0

我沒有看到一個問題與刪除單身,如果你想自由的空間更多的處理線程完成之後。只要確保所有線程在加入之前都加入了主線程。