std::unique_ptr<T,Deleter>::release - cppreference.com (original) (raw)
| pointer release() noexcept; | | (since C++11) (constexpr since C++23) | | --------------------------- | | ------------------------------------- |
Releases the ownership of the managed object, if any.
get() returns nullptr after the call.
The caller is responsible for cleaning up the object (e.g. by use of get_deleter()).
[edit] Parameters
(none)
[edit] Return value
Pointer to the managed object or nullptr if there was no managed object, i.e. the value which would be returned by get() before the call.
[edit] Example
#include
#include
#include
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 managed_foo(new Foo);
// [code that might return or throw or some such]
// [...]
legacy_api(managed_foo.release());
assert(managed_foo == nullptr);
}
Output:
[edit] See also
| | returns a pointer to the managed object (public member function) [edit] | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | returns the deleter that is used for destruction of the managed object (public member function) [edit] | | | replaces the managed object (public member function) [edit] |