Итак, я рассматривал этот вопрос Исключение выделения памяти в конструкторе, где мой босс заявляет в своем прекрасном ответе, что деструктор не будет вызван.
Что заставляет меня задуматься,
Если бы я написал
struct XBase
{
int* a;
char* b;
float* c;
XBase() : a(nullptr), b(nullptr), c(nullptr) {}
~XBase()
{
delete[] a; delete[] b; delete[] c;
}
};
и
struct X : XBase
{
X() {
a = new int[100];
b = new char[100];
c = new float[100];
}
}
Затем, если выделение c
завершается с ошибкой (при исключении выбрасывается), тогда будет вызван деструктор XBase
, так как был создан базовый класс.
И нет утечки памяти?
Правильно ли я?