std::unique_ptr<T,Deleter>::release
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"; }
};
// Ownership of the Foo resource is transferred when calling this function
void legacy_api(Foo* owning_foo)
{
std::cout << __func__ << '\n';
// [legacy code that no one understands or dares touch anymore]
// [...]
delete owning_foo;
}
int main()
{
std::unique_ptr<Foo> managed_foo(new Foo);
// [code that might return or throw or some such]
// [...]
legacy_api(managed_foo.release());
assert(managed_foo == nullptr);
}
Вывод:
Foo legacy_api ~Foo
См. также
| возвращает указатель на управляемый объект (открытая функция-член) |
|
| возвращает удалитель, используемый для уничтожения управляемого объекта (открытая функция-член) |
|
| заменяет управляемый объект (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/unique_ptr/release