Namespaces
Variants

std::unique_ptr<T,Deleter>:: release

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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() ).

Contents

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

#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

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