#cpp
Я правильно понял, что если я запишу:
try {
char * str = new char[30];
throw "exception";
delete [] str;
} catch(...) {
//здесь ничего не будем делать
}
то произойдет утечка памяти? А если запишу без delete, то утечки памяти не будет?
Также меня интересует, что если исключения произойдет по условию, то как быть с удалением,
или же память удалит С++ сам?
Если я не буду возбуждать исключения, то НЕ будет утечки? Например:
try {
char * str = new char[30];
//кое-что делаем, но исключения не возбуждаем.
delete [] str;
} catch(...) {
//ничего не делам
}
И в каких случаях память нужно удалять память в catch?
Ответы
Ответ 1
char *str = nullptr; try { str = new char[30]; throw "exception"; delete [] str; } catch(...) { delete [] str; } По Стандарту, применение оператора delete к указателю на уже очищенную память игнорируется. В C++ блока finally нет, потому можно сделать так. Или обернуть строку умным указателем, который в деструкторе автоматически дернет delete. ЗЫ Но вообще, советуют правильно, если это С++, то нужно по возможности пользоваться классами стандартной библиотеки в общем и std::string в частности.
Комментариев нет:
Отправить комментарий