
118
6 章 動的変数割り当てを最適化する
のベクトルや
1,000
記号の表)を持つ。関数にエンティティをうっかりコピーしたプログラムは、
エンティティの状態が関数で正しく表示できるか調べようと思ったのかもしれないが、コピーの実
行時コストはかなりなものになる。
クラスインスタンスのコピーが高価であったり望ましくなかったりするなら、コピーのコスト
を避ける便宜的な方法の
1
つがコピーを禁止することだ。コピーコンストラクタと代入演算子に
private
と宣言することで、呼び出しを防ぐことができる。呼び出しができないので、定義すら必
要ない。宣言だけで十分だ。例えば、次のコードで実現できる。
//
コピーを不可にする
C++11
以前の方法
class BigClass {
private:
BigClass(BigClass const&);
BigClass& operator=(BigClass const&);
public:
...
};
C++11
では、キーワード
delete
をコピーコンストラクタや代入演算子の宣言の後に付けて、同
じ効果が得られる。コンパイラがより明確なエラーメッセージを出せるので、
delete
を付けるコ
ンストラクタを
public
にするとよい。
//
コピーを不可にする
C++11
の方法
class BigClass {
public:
BigClass(BigClass const&) = delete;
BigClass& operator=(BigClass const&) = delete; ...