Рассмотрим следующий код:
class A
{
public:
A() {}
~A() {}
};
class B: public A
{
B() {}
~B() {}
};
A* b = new B;
delete b; // undefined behaviour
Насколько я понимаю, стандарт C ++ гласит, что удаление b - неопределенное поведение, т. Е. может произойти все, что .Но в реальном мире мой опыт показывает, что ~ A () вызывается всегда и память освобождается правильно.
если B вводит каких-либо членов класса со своими собственными деструкторами, онине будет вызван, но меня интересует только приведенный выше простой случай, где наследование используется, возможно, для исправления ошибки в одном методе класса, для которого исходный код недоступен.
Очевидно, это не такЭто будет то, что вы хотите в нетривиальных случаях, но это, по крайней мере, последовательно.Вам известна любая реализация C ++, где вышеописанное НЕ происходит для показанного кода?