Przejdź do głównej zawartości

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

Since C++11
pointer release() noexcept; 
Since C++23
constexpr pointer release() noexcept;

Releases the ownership of the managed object, if any.

get() returns nullptr after the call.

The caller is responsible for deleting the object.

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 <memory>
#include <iostream>
#include <cassert>

struct Foo {
Foo() { std::cout << "Foo\n"; }
~Foo() { std::cout << "~Foo\n"; }
};

int main()
{
std::cout
<< "Creating new Foo...\n";
std::unique_ptr<Foo> up(new Foo());

std::cout
<< "About to release Foo...\n";
Foo* fp = up.release();

assert (up.get() == nullptr);
assert (up == nullptr);

std::cout
<< "Foo is no longer owned by unique_ptr...\n";

delete fp;
}

Result
Creating new Foo...
Foo
About to release Foo...
Foo is no longer owned by unique_ptr...
~Foo

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

Since C++11
pointer release() noexcept; 
Since C++23
constexpr pointer release() noexcept;

Releases the ownership of the managed object, if any.

get() returns nullptr after the call.

The caller is responsible for deleting the object.

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 <memory>
#include <iostream>
#include <cassert>

struct Foo {
Foo() { std::cout << "Foo\n"; }
~Foo() { std::cout << "~Foo\n"; }
};

int main()
{
std::cout
<< "Creating new Foo...\n";
std::unique_ptr<Foo> up(new Foo());

std::cout
<< "About to release Foo...\n";
Foo* fp = up.release();

assert (up.get() == nullptr);
assert (up == nullptr);

std::cout
<< "Foo is no longer owned by unique_ptr...\n";

delete fp;
}

Result
Creating new Foo...
Foo
About to release Foo...
Foo is no longer owned by unique_ptr...
~Foo