Что происходит с указателем на объект класса, если в конструкторе этого класса вызывается исключение?
Существует класс val с единственным полем a. Конструктор этого класса бросает исключение, если значение поля == 0. Пусть указатель ptr указывает на динамически выделенную память для объекта класса val. Если в конструкторе класса выбросится исключение, то что же станет с указателем, выделится память или нет? Если да, то как её очистить в конце программы?
#include <iostream>
using namespace std;
class val {
private:
int a;
public:
val(int _a): a(_a) {
if (a==0)
throw - 1;
}
};
void main() {
try {
val* ptr = new val(0);
}
catch (int) {
cout << "Error";
}
}
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Память сразу же освобождается автоматически.
https://en.cppreference.com/w/cpp/language/new
If initialization terminates by throwing an exception (e.g. from the constructor), if new-expression allocated any storage, it calls the appropriate deallocation function