【发布时间】:2018-06-18 05:37:12
【问题描述】:
returnShapeType 创建的对象应该如何以及在哪里被删除?
这是一个工厂方法演示程序。
请出示代码。
class Shape
{
public:
Shape() {}
virtual void print() {std::cout << "\nFrom shape print";}
};
class Triangle: public Shape
{
public:
Triangle(){}
virtual void print() {std::cout << "\nFrom triangle print";}
};
class Rectangle: public Shape
{
public:
Rectangle(){}
virtual void print() {std::cout << "\nFrom rect print";}
};
class CreateShapeObject
{
public:
CreateShapeObject() {}
Shape *returnShapeType( std::string arg )
{
if (arg == "Triangle")
return new Triangle;
else if (arg == "Rectangle")
return new Rectangle;
}
};
////////////
class EndDeveloper
{
public:
CreateShapeObject obj;
EndDeveloper()
{
Shape *p = obj.returnShapeType("Triangle");
p->print();
Shape *q = obj.returnShapeType("Rectangle");
q->print();
}
};
【问题讨论】:
-
“在哪里”是什么意思?什么时候?执行它的代码应该在哪里(在哪个类中)?
-
最好的策略是通过不返回需要手动删除的内容来使问题变得毫无意义。智能指针是一个经常使用的糟糕解决方案。但是您可以将动态分配的对象包装在您自己的类型中,自动管理资源。
-
@juanchopanza 你能详细说明“糟糕的解决方案”吗?例如,我没有看到返回唯一指针的问题?
-
@andreee 还是一个指针,有指针和引用语义。
-
@juanchopanza “但是您可以将动态分配的对象包装在您自己的类型中,自动管理资源。”请在答案中举例说明。
标签: c++ design-patterns factory factory-pattern