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] |