おもろいC++コードを貼るスレ
■ このスレッドは過去ログ倉庫に格納されています
003528
2005/07/28(木) 21:28:47自分のスタイルでは参照のセマンティクスを持つ、継承を意識したクラスは全部
public: hogeClass();
private: hogeClass(const hogeClass& rhs);
public: virtual ~hogeClass();
private: hogeClass& operator=(const hogeClass& rhs);
って書いちゃうんですよ。ようするにコピー禁止にしちゃう。
もうこのスタイルにしてから長いので以前のことは忘れてしまいましたが
op=を有効にしておいたら単純な
DerivedClass derivedObj;
BaseClass baseObj = derivedObj;
でもスライシングって起こりませんでしたっけ?
反対に値のセマンティクスを持つクラスは
public: hogeClass();
public: hogeClass(const hogeClass& rhs);
public: ~hogeClass();
public: hogeClass& operator=(const hogeClass& rhs);
にしてデストラクタがvirtualじゃないんだから継承すんなボケって主張するようにしてます。
実際には手抜きクラスは
public: hogeClass();
private: hogeClass(const hogeClass& rhs);
public: ~hogeClass();
private: hogeClass& operator=(const hogeClass& rhs);
で、継承もさせんしコピーもさせんという形になってしまうのですが。
■ このスレッドは過去ログ倉庫に格納されています