请问一个关于工厂模式的有关问题
请教一个关于工厂模式的问题
先说明一下代码,“主板”类和“主板制造商”类,主板制造商根据输入,生成不同品牌的主板
这段代码运行起来是没有问题的
我的问题是:由于工厂的CreateMotherboard()方法是通过new创建对象,每创建一次需要对应一个delete销毁,这个delete该放在哪儿?放在使用它的地方(此处的main函数)吗?感觉让用户来delete不太合适,用户毕竟不清楚CreateMotherboard()方法内部是通过new创建的,如果delete放在工厂内部 那应该怎么实现
------解决方案--------------------
1:给工厂提供一个releaseObj的接口,用户调用
2:将new的指针改为智能指针
先说明一下代码,“主板”类和“主板制造商”类,主板制造商根据输入,生成不同品牌的主板
- 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的指针改为智能指针