Отдача владения через release в C++
Метод release у std::unique_ptr
отдает сырой указатель и оставляет умный указатель пустым.
После вызова unique_ptr больше не удаляет
объект: ответственность переходит к тому, кто
получил адрес. Его нужно освободить через
delete, иначе утечка. Запишем число,
заберем адрес и сразу освободим его:
#include <iostream>
#include <memory>
std::unique_ptr<int> gate = std::make_unique<int>(6);
int* handoff = gate.release();
std::cout << *handoff << "\n";
delete handoff;
Создайте std::unique_ptr<int>
со значением 3. Передайте владение
через release, выведите число
и освободите сырой указатель.
Объявите std::unique_ptr<int>
с 8. После release
проверьте, что умный указатель больше не
владеет объектом: выведите 1,
если после вызова get вернул
nullptr, иначе 0.
Не забудьте delete для сырого адреса.