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 ;
(начиная с C++11)
(constexpr начиная с C++23)

Освобождает владение управляемым объектом, если таковой имеется.

get() возвращает nullptr после вызова.

Вызывающая сторона несёт ответственность за очистку объекта (например, с помощью get_deleter() ).

Содержание

Параметры

(нет)

Возвращаемое значение

Указатель на управляемый объект или nullptr если управляемого объекта не было, т.е. значение, которое было бы возвращено get() до вызова.

Пример

#include <cassert>
#include <iostream>
#include <memory>
struct Foo
{
    Foo() { std::cout << "Foo\n"; }
    ~Foo() { std::cout << "~Foo\n"; }
};
// Владение ресурсом Foo передается при вызове этой функции
void legacy_api(Foo* owning_foo)
{
    std::cout << __func__ << '\n';
    // [устаревший код, который никто не понимает или не решается изменять]
    // [...]
    delete owning_foo;
}
int main()
{
    std::unique_ptr<Foo> managed_foo(new Foo);
    // [код, который может завершиться возвратом или исключением]
    // [...]
    legacy_api(managed_foo.release());
    assert(managed_foo == nullptr);
}

Вывод:

Foo
legacy_api
~Foo

Смотрите также

возвращает указатель на управляемый объект
(public member function)
возвращает удалитель, используемый для уничтожения управляемого объекта
(public member function)
заменяет управляемый объект
(public member function)