C のユーザー定義のコピー コンストラクター
C では、通常、コンパイラーはクラスのデフォルトのコピー コンストラクターを生成し、メンバーごとに実行します。コピーすること。ただし、特定のシナリオでは、ユーザー定義のコピー コンストラクターが必要です。
ユーザー定義のコピー コンストラクターはどのような場合に必要ですか?
ユーザー定義のコピー コンストラクターは、デフォルトのコピー コンストラクターのメンバーごとのコピー動作が不十分な場合に必要です。次の例を考えてみましょう。
<code class="cpp">class Class { public: Class(const char* str); ~Class(); private: char* stored; }; Class::Class(const char* str) { stored = new char[srtlen(str) + 1]; strcpy(stored, str); } Class::~Class() { delete[] stored; }</code>
この例では、デフォルトのコピー コンストラクターは、基礎となるバッファーを複製するのではなく、単にポインターを格納されたメンバーにコピーします。一方のコピーがもう一方のコピーより先に破棄されると、未定義の動作が発生する可能性があります。
ユーザー定義のコピー コンストラクター
これに対処するには、ユーザー定義のコピーを定義できます。ディープ コピーを実行するコンストラクター:
<code class="cpp">Class::Class(const Class& another) { stored = new char[strlen(another.stored) + 1]; strcpy(stored, another.stored); }</code>
このコピー コンストラクターは、新しいメモリを割り当て、格納されたメンバーの内容をコピーし、両方のコピーが独自の独立したバッファーを持つようにします。
以上がC でユーザー定義のコピー コンストラクターが必要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。