2012-03-25 92 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

我没有看到一个问题与删除单身,如果你想自由的空间更多的处理线程完成之后。只要确保所有线程在加入之前都加入了主线程。