工厂模式(C ++)和多线程中的静态对象

时间:2012-03-25 09:23:20

标签: c++ multithreading

我编写了以下代码,并对内存分配及其在多线程环境中的使用有一些疑问。

ClsFactory基于id(未示出)返回静态对象。

  1. 如何在程序终止之前释放分配给此静态对象的内存?如果我做对了,使用std::auto_ptr,会将所有权转移到auto_ptr中的main。我正在努力避免这种情况。

  2. 鉴于我可以在程序开始时创建所有必要的单例(例如Cls实例),在生成线程之前,在这里使用单例会有任何问题吗?

  3. 简而言之,我想在产生线程之前使用工厂来创建单例,然后在完成并行任务后删除单例。

    提前致谢!

    编辑:我在这个论坛上阅读有关依赖注入的内容。如果我在下面说明的代码有更好的设计,我将非常感谢代码示例。

    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();
    }
    

1 个答案:

答案 0 :(得分:0)

如果您想在线程完成后释放空间以进行更多处理,我没有看到删除单例的问题。在这样做之前,请确保所有线程都已加入main。