std::unique_ptr::release
Материал из cppreference.com
<tbody>
</tbody>
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 функция-элемент) |