サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <boost/utility.hpp>
class SomeThing : boost::noncopyable
{
...
};
int main()
{
SomeThing a, b;
a = b; // ここでコンパイルエラーになる
SomeThing c( a ); // これもエラー
return 0;
}
コピーしちゃダメなクラス、というのを作りたいことが時々あります。 「じゃあコピーしないように気をつけてプログラムを組む」というのは最後の手段で、 出来る限り「もしコピーするプログラムを書いてしまったらコンパイルエラーになる」 ように作っておくのが安全ですネ。
そこで使われる常套手段が、「コピーコンストラクタと operator=
の宣言を private
に置く。しかもそいつらはわざと実装しない」
という方法でした。(この2つの関数は、
何も書かないでいるとコンパイラが自動で作ってしまうので…)
その作業の肩代わりをしてくれるのがこの noncopyable
です。