std::unique_ptr::release
Материал из cppreference.com
< cpp | memory | unique ptr
pointer release() noexcept; |
(начиная с C++11) (constexpr начиная с C++23) |
|
Освобождает владение управляемым объектом, если таковой имеется.
get() возвращает nullptr после вызова.
Вызывающий объект отвечает за очистку объекта (например, с помощью get_deleter()).
Содержание |
[править] Параметры
(нет)
[править] Возвращаемое значение
Указатель на управляемый объект или nullptr, если управляемого объекта не было, т.е. значение, которое возвращается get() перед вызовом.
[править] Пример
Запустить этот код
#include <cassert> #include <iostream> #include <memory> struct Foo { Foo() { std::cout << "Foo\n"; } ~Foo() { std::cout << "~Foo\n"; } }; // Право собственности на ресурс Foo передаётся при вызове этой функции void legacy_api(Foo* owning_foo) { std::cout << __func__ << '\n'; // [унаследованный код, который никто больше не понимает или не осмеливается трогать] // [...] delete owning_foo; } int main() { std::unique_ptr<Foo> managed_foo(new Foo); // [код, который может возвращать или генерировать исключение или что-то в этом роде] // [...] legacy_api(managed_foo.release()); assert(managed_foo == nullptr); }
Вывод:
Foo legacy_api ~Foo
[править] Смотрите также
возвращает указатель на управляемый объект (public функция-элемент) | |
возвращает средство удаления, которое используется для уничтожения управляемого объекта (public функция-элемент) | |
заменяет управляемый объект (public функция-элемент) |