C での多態性オブジェクトのコピー
多態性オブジェクトを操作する場合、多くの場合、オブジェクトのディープ コピーの作成が必要になります。ただし、コピー コンストラクターを使用し、operator= をオーバーロードする従来の方法は、特定の派生クラスの型がコンパイル時に不明な場合には適さない可能性があります。
クローン メソッドのアプローチ
一般的なアプローチの 1 つは、基本クラスに仮想 Clone メソッドを実装することです。次に、各派生クラスは、特定の派生クラスの新しいインスタンスを作成し、データ メンバーをコピーする独自のバージョンの Clone を実装します。
例:
class Base { public: virtual Base* Clone() = 0; }; class Derivedn : public Base { public: Derivedn* Clone() { Derivedn* ret = new Derivedn; copy all the data members return ret; } };
共変戻り型
ただし、これを処理するには、より慣用的な C の方法があります。共変の戻り値の型。これにより、派生クラスは Clone メソッドから独自の型へのポインターを返すことができます。
修正例:
class Base { public: virtual Base* Clone() = 0; }; class Derivedn : public Base { public: // Covariant return type, returns Derivedn* Derivedn* Clone() { return new Derivedn(*this); } private: Derivedn(const Derivedn&); // Copy constructor (possibly implicit or private) };
共変戻り型を使用すると、コピー コンストラクターは派生クラスの新しいインスタンスを作成するために暗黙的に使用されます。これにより実装が簡素化され、明示的にメンバーをコピーする必要がなくなりました。
以上がC でポリモーフィック オブジェクトを効果的にディープ コピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。