这几天再看设计模式,在看到原型模式的原理时,心里就想这个实现不就可以用复制构造函数不就可以了吗,等看到示例代码时发现还真是差不多这么回事,但是在实现代码中却有点不好理解,如下代码:
#include <IOSTREAM>
using namespace std;
class Prototype
{
public:
virtual ~Prototype(){};
//定义一个克隆的抽象函数
virtual Prototype *Clone() const = 0 ;
protected:
Prototype(){ }
};
class Wukong : public Prototype
{
public:
Wukong(int age,char *name)
{
this->age = age;
this->name = name;
}
//拷贝构造函数
Wukong(const Wukong&C)
{
age=C.age;
name = new char[100];
strcpy(name,C.name);
}
//克隆函数
Prototype *Clone() const
{
//当类对象以参数的形式传递时会调用拷贝构造函数
return new Wukong(*this);
}
void Display()
{
cout<<"this is a test func"<<endl;
cout<<"age = "<<age<<endl<<"name = "<<name<<endl;
}
private:
int age;
char *name;
};
这个例子是在网上摘抄的,问题就在clone中,return new Wukong(*this),为什么我们要使用new操作符呢,复制构造函数出来的不就是一个实例的拷贝吗?但是不加new有会出现错误,为什么呢?
请各位高手指点