请教一个关于工厂模式的问题
先说明一下代码,“主板”类和“主板制造商”类,主板制造商根据输入,生成不同品牌的主板
- 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的指针改为智能指针