デストラクタを private にする.

cppll の [cppll:11457] delete this しちゃったら… のスレッドより.

C++で,デストラクタを private にすると,クラスのインスタンスを生成する際にnew を強制できる.

class Hoge
{
private:
  virtual ~Hoge() {}
public:
  void suicide()
  {
    delete this;
  }
};

このようにデストラクタをprivate にしておくと

Hoge hoge;

はデストラクタを呼べないので,コンパイル時にエラーとなる.

コンパイルするには

Hoge *hoge=new Hoge;

とnewで生成するしかないので,安心して delete this が行えるという訳.へー.

2004/12/26 追記

どうも上記方法には抜け道があるようで,デストラクタを非publicにするだけ安心はできない模様."通りすがりですが"様,御指摘ありがとうございます.


Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
スコット・メイヤーズ
ピアソン・エデュケーション
売り上げランキング: 13972
おすすめ度の平均: 4.5
5 第3版
5 そうすれば、良かったんだ!
5 実践に即したTips集
2 日本語にガッカリ
4 良書なのに・・・