スレを勃てるまでもないC/C++の質問はここで 11
■ このスレッドは過去ログ倉庫に格納されています
0299297
2009/06/25(木) 23:32:25>派生クラスのデストラクタが呼ばれないだけだと思ってた。
いや、厳密には未定義なんだわ。
5.3.5
if the static type of the operand is different from its dynamic type,
the static type shall be a base class of the operand’s dynamic type
and the static type shall have a virtual destructor
or the behavior is undefined.
これを俺なりに訳すと
もしオペランド(演算対象)の静的な型と動的な型が異なる場合、
静的な型は「オペランドの動的な型の基底クラス」になる。
そしてその静的な型は仮想デストラクタを持つべきであり、
さもなければ挙動は未定義である。
ところが
boost::shared_ptr<基底クラス> sh_p(new 派生クラス());
これだとsh_pが破棄される時に自動的にdeleteされるわけだが
基底クラスが非仮想デストラクタでも未定義にならないというすげー代物。
■ このスレッドは過去ログ倉庫に格納されています