На самом деле я думаю о тривиально разрушаемых объектах, а не только о POD (я не уверен, что POD может иметь базовый класс).
Когда я прочитал это объяснение is_trivially_destructible из cppreference, я заметил это:
Хранение, занятое тривиально разрушаемыми объектами, может быть повторно использовано без вызова деструктора.
Таким образом, это безопасно:
struct A {
int a;
};
struct B : A {
int b;
};
int main() {
A* a = new B;
delete a;
}
B::~B()
не будет вызван - и AFAIK (пожалуйста, исправьте, если я ошибаюсь) вся память будет освобождена. И B::~B()
наверняка тривиально.
Я знаю, что этот код плохо пахнет, но мой вопрос касается только безопасности этого кода...