Пространства имён
Варианты
Действия

std::unique_ptr::release

Материал из cppreference.com
< cpp‎ | memory‎ | unique ptr
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
 
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 функция-элемент) [править]
возвращает средство удаления, которое используется для уничтожения управляемого объекта
(public функция-элемент) [править]
заменяет управляемый объект
(public функция-элемент) [править]