[C++] コピーと代入を禁止する

継承により禁止する

class Uncopyable {
protected:
    Uncopyable() {}
    ~ Uncopyable() {}
private:
    Uncopyable(const Uncopyable&);
    Uncopyable& operator=(const Uncopyable&);
};

というようなクラスを作成しておいて private 継承する。

boost::noncopyable を使用しても良い。

参考 : ある程度経験を積んだC++プログラマは絶対にvirtualデストラクタのないクラスを継承しない? - 神様なんて信じない僕らのために

private で空の定義をして禁止

class Sample {
	private:
		Sample(const Sample&);
		void operator=(const Sample&);
};

上記の方法をマクロで行う

GoogleのC++スタイルガイドラインはコレを使用している。

#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)

参考 : Google C++スタイルガイド 日本語訳 | textdrop

Share
関連記事