是否有必要在以下C ++代码中使用“new”运算符?

时间:2016-08-17 06:28:02

标签: c++ this-pointer

代码是:

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.
}

2 个答案:

答案 0 :(得分:11)

简单地说,没有。

C ++中的this关键字是一小段语法糖,意思是“指向此对象的当前实例的指针”。

按英语定义的copy方法返回 new 对象,与每个方法中的第一个相同,但占用内存中的其他位置 。从this方法返回copy很自然地会打破这个范例,因为它会将指针返回到被“复制”的对象

答案 1 :(得分:-1)

你的功能

base* derived::copy()const{
   return new derived(*this);
}

似乎是正确的 - 你必须使用" new"运营商在这里否则,您将创建一个本地实例(派生类)并返回指向该本地实例的指针。执行您的方法后,本地实例将变为无效(因为它超出了范围)。