Scroll to navigation

std::unique_ptr::release(3) C++ Standard Libary std::unique_ptr::release(3)

NAME

std::unique_ptr::release - std::unique_ptr::release

Synopsis


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()).

Parameters


(none)

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.

Example

// Run this code


#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);
}

Output:


Foo
legacy_api
~Foo

See also


get returns a pointer to the managed object
(public member function)
get_deleter returns the deleter that is used for destruction of the managed object
(public member function)
reset replaces the managed object
(public member function)

2024.06.10 http://cppreference.com