Spec-Zone.ru › C++

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

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"; }
};

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

Вывод:

Foo
legacy_api
~Foo

См. также

get
возвращает указатель на управляемый объект
(открытая функция-член)
get_deleter
возвращает удалитель, используемый для уничтожения управляемого объекта
(открытая функция-член)
reset
заменяет управляемый объект
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/unique_ptr/release

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API