我编写了以下代码,并对内存分配及其在多线程环境中的使用有一些疑问。
类ClsFactory
基于id
(未示出)返回静态对象。
如何在程序终止之前释放分配给此静态对象的内存?如果我做对了,使用std::auto_ptr
,会将所有权转移到auto_ptr
中的main
。我正在努力避免这种情况。
鉴于我可以在程序开始时创建所有必要的单例(例如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 :(得分:0)
如果您想在线程完成后释放空间以进行更多处理,我没有看到删除单例的问题。在这样做之前,请确保所有线程都已加入main。