Все отмеченные объявления допустимы: ptr разыменовывается уже после new. Основная ошибка — утечка выделенного int, поскольку перед выходом нет delete.
Определение строк с нарушениями в программе
Все отмеченные объявления допустимы: ptr разыменовывается уже после new. Основная ошибка — утечка выделенного int, поскольку перед выходом нет delete.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо указать, в каких строках данного фрагмента кода присутствуют ошибки.
#include <iostream>
using namespace std;
int main() {
int* ptr = nullptr; // 1
ptr = new int(1); // 2
const int val = *ptr; // 3
int const* cptr = ptr; // 4
int& ref = *ptr; // 5
return 0;
}
Ответ
Все отмеченные объявления допустимы: ptr разыменовывается уже после new. Основная ошибка — утечка выделенного int, поскольку перед выходом нет delete.
const int val создаёт отдельную неизменяемую копию. int const* cptr запрещает изменение через cptr, но сам объект остаётся изменяемым через ptr или ref. Ссылка ref также корректно привязана к существующему int.
Добавление delete ptr; перед возвратом устраняет утечку, если после него больше не обращаться через эти указатели и ссылку. Проще вообще использовать локальный int либо unique_ptr, если динамическое размещение действительно нужно.