[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

  1. コメントはまだありません。

  1. トラックバックはまだありません。

*


Advertisement