boost::noncopyable

トップページ > 小道具 >

abstract

必要なヘッダ
<boost/utility.hpp>
出来ること
コピー禁止クラスの定義
リファレンス
en

sample

サンプルの動作確認バージョン [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;
}

etc

コピーしちゃダメなクラス、というのを作りたいことが時々あります。 「じゃあコピーしないように気をつけてプログラムを組む」というのは最後の手段で、 出来る限り「もしコピーするプログラムを書いてしまったらコンパイルエラーになる」 ように作っておくのが安全ですネ。

そこで使われる常套手段が、「コピーコンストラクタと operator= の宣言を private に置く。しかもそいつらはわざと実装しない」 という方法でした。(この2つの関数は、 何も書かないでいるとコンパイラが自動で作ってしまうので…)

その作業の肩代わりをしてくれるのがこの noncopyable です。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0