读书人

请问一个关于工厂模式的有关问题

发布时间: 2012-06-16 20:34:32 作者: rapoo

请教一个关于工厂模式的问题
先说明一下代码,“主板”类和“主板制造商”类,主板制造商根据输入,生成不同品牌的主板

C/C++ code
//----------//主板类源文件//----------class cMotherboard{public:    cMotherboard()    {        printf("cMotherboard\n");    }        virtual ~cMotherboard()    {        printf("~cMotherboard\n");    }        void Use(void);};void cMotherboard::Use(void){    printf("Motherboard use...\n");}class cAsusMb:public cMotherboard    //华硕主板{public:    cAsusMb()    {        printf("cAsusMb\n");    }        ~cAsusMb()    {        printf("~cAsusMb\n");    }};class cGigaMb:public cMotherboard    //技嘉主板{public:    cGigaMb()    {        printf("cGigaMb\n");    }        ~cGigaMb()    {        printf("~cGigaMb\n");    }};//-------------------//主板制造商类源文件//-------------------class cMotherboardManufacturer{public:    cMotherboard* CreateMotherboard(char* brand);    cMotherboardManufacturer()    {        printf("cMotherboardManufacturer\n");    }        virtual ~cMotherboardManufacturer()    {        printf("~cMotherboardManufacturer\n");    }    private:    cMotherboard* pMotherboard;    };cMotherboard* cMotherboardManufacturer::CreateMotherboard(char* brand){    pMotherboard = NULL;    if (0 == strcmp(brand, "asus"))    {        pMotherboard = new cAsusMb;    }    else if (0 == strcmp(brand, "giga"))    {        pMotherboard = new cGigaMb;    }    return pMotherboard;}//----------//   应用//----------int main(void){    cMotherboardManufacturer* mm = new cMotherboardManufacturer;        cMotherboard* m1 = mm->CreateMotherboard("msi");    m1->Use();    delete m1;    cMotherboard* m2 = mm->CreateMotherboard("giga");    m2->Use();    delete m2;    delete(mm);            return 0;}


这段代码运行起来是没有问题的
我的问题是:由于工厂的CreateMotherboard()方法是通过new创建对象,每创建一次需要对应一个delete销毁,这个delete该放在哪儿?放在使用它的地方(此处的main函数)吗?感觉让用户来delete不太合适,用户毕竟不清楚CreateMotherboard()方法内部是通过new创建的,如果delete放在工厂内部 那应该怎么实现

[解决办法]
1:给工厂提供一个releaseObj的接口,用户调用
2:将new的指针改为智能指针

读书人网 >C++

热点推荐