ホームページ > バックエンド開発 > C++ > C でポリモーフィック オブジェクトを効果的にディープ コピーするにはどうすればよいですか?

C でポリモーフィック オブジェクトを効果的にディープ コピーするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-28 01:26:11
オリジナル
557 人が閲覧しました

How Can I Deep Copy Polymorphic Objects in C   Effectively?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート