代码是:
class base{
base(){}
virtual base* copy()const=0;
virtual ~base(){}
};
class derived:public base{
derived(){}
base* copy()const;
~derived(){}
};
base* derived::copy()const{
return new derived(*this);
}
是否有必要在函数new
中使用copy()
运算符或代码使用new
运算符的原因?
我应该直接返回this
指针,如下所示:
const base* derived::copy()const{
return this;// note: this pointer is const.
}
答案 0 :(得分:11)
简单地说极,没有。
C ++中的this
关键字是一小段语法糖,意思是“指向此对象的当前实例的指针”。
按英语定义的copy
方法返回 new 对象,与每个方法中的第一个相同,但占用内存中的其他位置 。从this
方法返回copy
很自然地会打破这个范例,因为它会将指针返回到被“复制”的对象。
答案 1 :(得分:-1)
你的功能
base* derived::copy()const{
return new derived(*this);
}
似乎是正确的 - 你必须使用" new"运营商在这里否则,您将创建一个本地实例(派生类)并返回指向该本地实例的指针。执行您的方法后,本地实例将变为无效(因为它超出了范围)。