ユーザー定義のコピー コンストラクターはどのような場合に必要ですか?
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 サイトの他の関連記事を参照してください。