ユーザー定義のコピー コンストラクターを C で実装する必要があるのはどのような場合ですか?

Mary-Kate Olsen
リリース: 2024-10-23 17:49:49
オリジナル
958 人が閲覧しました

When Should You Implement a User-Defined Copy Constructor in C  ?

ユーザー定義のコピー コンストラクターはどのような場合に必要ですか?

C コンパイラーは、メンバーごとに実行されるクラスのコピー コンストラクターを自動的に生成します。デフォルトでコピーします。ただし、特定の状況では、独自のユーザー定義のコピー コンストラクターを定義する必要がある場合があります。

ユーザー定義のコピー コンストラクターを定義する理由:

  • ディープコピー: クラスのメンバー変数が、個別にコピーする必要がある動的メモリを割り当てる場合、メンバーごとのコピーでは不十分です。このような場合、ディープ コピーを実行するにはユーザー定義のコピー コンストラクターが必要です。これにより、オブジェクトのメンバー変数の動的メモリの新しいコピーが作成されます。

例:

文字列を格納する次のクラスについて考えてみましょう。

<code class="cpp">class Class {
public:
    Class(const char* str);
    ~Class();
private:
    char* stored;
};</code>
ログイン後にコピー

デフォルトのコピー コンストラクターでは、格納されたメンバーは参照によってのみコピーされるため、コピーの 1 つがコピーされたときに未定義の動作が発生します。破壊されました。これを防ぐために、ディープ コピーを実行するユーザー定義のコピー コンストラクターを定義します:

<code class="cpp">Class::Class(const Class& another) {
    stored = new char[strlen(another.stored) + 1];
    strcpy(stored, another.stored);
}</code>
ログイン後にコピー

さらに、代入演算子がディープ コピーを正しく実行するには、ユーザー定義のコピー コンストラクターも必要です:

<code class="cpp">void Class::operator = (const Class& another) {
    char* temp = new char[strlen(another.stored) + 1];
    strcpy(temp, another.stored);
    delete[] stored;
    stored = temp;
}</code>
ログイン後にコピー

以上がユーザー定義のコピー コンストラクターを C で実装する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!