Ранний выход из функции при ручном new/delete
Вы читаете код старого модуля:
void process(const Request& r) {
Buffer* b = new Buffer(1024);
if (!b->load(r)) {
return;
}
b->run();
delete b;
}
Что произойдёт, если load() вернёт false?
- Память под `Buffer` не освободится: `delete` не выполнится
- Объект будет уничтожен, потому что указатель `b` выходит из области видимости, а вместе с ним разрушается и всё, на что он ссылается
- Компилятор вставит вызов `delete` перед каждым `return` автоматически
- Утечки нет: динамическая память возвращается системе сразу после выхода из функции
