-1

暗黙のコピー コンストラクターが次のように動作することは誰もが知っています。デフォルトでは、すべてのメンバー変数を構築してから、各メンバー変数に適切な対応する値を割り当てます。

多くの場合、デフォルトで構築してから代入するのではなく、各メンバー変数をコピーとして初期化するコピー コンストラクターが 必要です。(たとえば、いくつかのconstメンバー変数があります)。

質問:各メンバー変数をコピーとして初期化 するコピー コンストラクターを手動で作成するのは非常に面倒で、メンバー変数の数が増えるとばかげています。暗黙のコピー コンストラクターで初期化リストを使用する方法はありますか? 初期化リストを手動で書く他の方法はありますか?

4

1 に答える 1

9

暗黙のコピー コンストラクターが次のように動作することは誰もが知っています。デフォルトでは、すべてのメンバー変数を構築してから、各メンバー変数に適切な対応する値を割り当てます。

いいえ、実際にはそのようには機能しません。C++11 標準のパラグラフ 12.8/15 では、次のように指定されています。

非共用体クラスの暗黙的に定義されたコピー/移動コンストラクターは、そのベースとメンバーのメンバー単位のコピー/移動をX実行します。[...] 各基本または非静的データ メンバーは、そのタイプに適した方法でコピー/移動されます。

— メンバーが配列の場合、各要素は の対応するサブオブジェクトで直接初期化されxます。

— メンバー m が右辺値参照型 を持つ場合、それは;T&&で直接初期化されます。static_cast<T&&>(x.m)

それ以外の場合、ベースまたはメンバーは の対応するベースまたはメンバーで直接初期化されxます。

言い換えると:

多くの場合、デフォルトで構築してから代入するのではなく、各メンバー変数をコピーとして初期化するコピー コンストラクターが必要です。(たとえば、いくつかの const メンバー変数があります)。

あなたの願いはすでに現実のものです。

于 2013-06-11T21:11:49.440 に答える