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)
posted with amazlet at 09.04.05
おすすめ度の平均:
第3版そうすれば、良かったんだ!
実践に即したTips集
日本語にガッカリ
良書なのに・・・