...
throw;
}
...
int main()
{
Base m("Hello");
return 0;
}
Что будет с выделенной памятью для объекта m?
Будет освобождена, правда потом все упадет
придется обязательно ловить? try { Base m("Hello"); } catch(...) { ... } а как хороша данная затея: кидать исключения в конструкторе?
Если можно не кидать то лучше не кидать
да норм вполне идея
нормальная затея кидать исключение из конструктора, если ты не можешь сконструировать объект по каким-то причинам
Тут память на стеке выделяется. Разве может быть вариант, что она утечет?
Может если там члены класса всякие raw ptr
В теле конструктора нельзя выполнить повторную генерацию исключения
Вопрос явно был не про это
Я понимаю, но мне кажется лучше уделить внимание, на всякий случай, тк можно было б хотя б 1 выбросить
В твоем случае думаю, что не верно понимаешь. Место под поля твоего класса сразу выделяется.
для полей вызываются соответствующие деструкторы при throw (в моем случае, для класса string), верно? а для объекта? Где-то же он должен хранится...
Всё выделяется заранее, просто язык тебе гарантирует, что почистит память под сам объект в случае, если его конструктор выкинул исключение. Но это касается самого объекта. Если ты в конструкторе сделал new, а потом упал с исключением, то память, выделенную этим new никто уже не почистит.
А где там память-то выделяется?
Обсуждают сегодня