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メソッドは、英語の定義によると、すべての点で最初のオブジェクトと同じですが、メモリ内の異なる場所を占有する新しいオブジェクトを返します。メソッドから戻ると、「コピー」されているオブジェクトへのポインターが返されるため、このパラダイムは当然破綻します。thiscopy

于 2016-08-17T06:39:09.400 に答える
-1

あなたの機能

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

正しいようです-ここでは「新しい」演算子を使用する必要があります。それ以外の場合は、(派生クラスの) ローカル インスタンスを作成し、そのローカル インスタンスへのポインターを返します。メソッドの実行後、ローカル インスタンスは無効になります (範囲外であるため)。

于 2016-08-17T07:53:19.017 に答える