次のコードを検討してください。
class A
{
public:
A() {}
~A() {}
};
class B: public A
{
B() {}
~B() {}
};
A* b = new B;
delete b; // undefined behaviour
私の理解では、C++ 標準では、b の削除は未定義の動作であると述べられています。つまり、何かが起こる可能性があります。しかし、現実の世界では、私の経験では ~A() は常に呼び出され、メモリは正しく解放されます。
B が独自のデストラクタを持つクラス メンバを導入した場合、それらは呼び出されませんが、ソース コードが 1 つのクラス メソッドのバグを修正するために継承が使用される、上記の単純な種類のケースにのみ関心があります。利用できません。
明らかに、これは自明ではないケースでは望んでいるものではありませんが、少なくとも一貫しています。示されているコードについて、上記が発生しないC++ 実装を認識していますか?