1.コンパイラが自動的に関数を生成します
クラスを定義する場合、コンストラクタを宣言していない場合は、それらが不足しているデストラクタ、コピーコンストラクタとコピー代入演算子は、それのために対応する機能を(のコンパイルされたバージョン)をコンパイラに宣言します。
コピーを防ぐ2.
コピーを中止するには、2つの方法があります。
この方法の一つ:
新基準、およびコピーコンストラクタをコピーの下に以下の方法を使用して、代入演算子削除機能(削除機能)のように定義されます。
構造体NOCOPY
{
NOCOPY(); // ...
NOCOPY(定数NOCOPY&)=削除。
NOCOPY&演算子=(CONST NOCOPY&)削除=。
// ...
}
方法2:
コピーコンストラクタとコピー代入演算子は、プライベートと宣言し、次の方法を使用して実装されていません。
クラスNOCOPY
{
NOCOPY(); // ...
プライベート:
NOCOPY(定数NOCOPY&);
NOCOPY&演算子=(CONST NOCOPY&)。
// ...
}
オブジェクトがコピー操作を実行するために、別の対象または割り当てに行くNOCOPYすると機能がプライベートプライベートとして定義されているため、未定義のリンクエラーのリード部材があるでしょう。
メンバ関数や友人機能する場合には実現が存在しないため、リンクエラーが発生しますと、聖歌に入ります。
要約すると、この方法は、通常、コピー操作の完了を防ぐために推奨されます。