コピーコンストラクタ
コピーコンストラクタの定義
コピーコンストラクタは特殊なコンストラクタ、あるオブジェクト指向のクラス参照パラメータ。役割は、すでに同じタイプの新しいオブジェクトを初期化するために存在するオブジェクトです。
クラスのクラス名{
公衆 :
クラス名(パラメータ); //コンストラクタ
クラス名(のconst&オブジェクト名のクラス名); //コピーコンストラクタは、渡された参照オブジェクトを変更したくありません
// ...
}。
クラス名::クラス(のconst名&クラスオブジェクト名)コピーコンストラクタを実装//
} {関数本体
暗黙のコピーコンストラクタ
Lプログラマは、クラスの初期化コピーコンストラクタを宣言していない場合、コンパイラが暗黙の自身のコピーコンストラクタを生成します。
Lコンストラクタ関数により行われる:目標として初期値の各メンバーのためのデータ値、初期化は、オブジェクトの対応するデータメンバを確立します。
「削除=」
あなたは、オブジェクトリットルのコピーコンストラクタにしたくない場合
nはC ++ 98方法:コピーコンストラクタはprivateとして宣言し、達成するための機能を提供していません。
nはC ++ 11の方法:「=削除」と、コンパイラはデフォルトコピーコンストラクタを生成しません示します。
例1:
定義されたクラスポイント{// Pointクラス
公衆:
ポイント(INT XX = 0、INT YY = 0){X = XX; Y = YY;} //コンストラクタ、インライン
(ポイント&Pのconst)ポイント=削除; //コンパイラを示すことは、デフォルトコピーコンストラクタを生成しません。
民間:
int型のx、yの; //プライベートデータ
}。
呼び出されたコンストラクタ3例をコピーします
Lは初期値、コピー設定の発生としてこのクラスの別のオブジェクトにオブジェクトを定義したとき、
オブジェクトは、関数のクラスのパラメータである場合、機能は、コンフィギュレーションが発生コピー、引数オブジェクトの初期化パラメータを使用して呼び出され、L; このような組合せは、クラスのコンストラクタが発生書きます
Lの関数の戻り値は、クラスのオブジェクトである場合、この関数は、関数呼び出しの実行を返す完了し、未知のオブジェクトの初期化、一時的なオブジェクト内のreturn文が呼び出す関数に渡され、コピーコンストラクタは、この時点で発生します。
nはこのような状況は、設定不要なコピーを移動することで回避することができます