3

代码是:

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

2 回答 2

11

说的非常简单,没有。

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

根据copy英语定义,方法返回一个对象,在各方面都与第一个对象相同,但在内存中占据不同的位置this从方法返回copy很自然地会打破这种范式,因为它会返回一个指向被“复制”的对象的指针。

于 2016-08-17T06:39:09.400 回答
-1

你的功能

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

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

于 2016-08-17T07:53:19.017 回答