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