РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
638 of 815 menu

Метод release

Метод release освобождает владение объектом, которым управляет unique_ptr, и возвращает указатель на этот объект. После вызова метода unique_ptr становится пустым (не хранит никакого указателя), но сам объект в памяти не удаляется. Ответственность за дальнейшее удаление объекта ложится на программиста. Метод не принимает параметров и возвращает значение типа pointer (обычно T*).

Синтаксис

ptr.release()

Пример

Давайте создадим unique_ptr, освободим владение с помощью метода release и убедимся, что объект остался в памяти:

#include <iostream> #include <memory> using namespace std; int main() { unique_ptr<int> ptr(new int(42)); int* raw = ptr.release(); if (ptr == nullptr) { cout << "ptr is empty" << endl; } cout << *raw << endl; delete raw; return 0; }

Результат выполнения кода:

"ptr is empty" 42

Пример

Давайте освободим владение строкой и передадим сырой указатель другой функции:

#include <iostream> #include <memory> #include <string> using namespace std; void printString(string* str) { cout << *str << endl; delete str; } int main() { unique_ptr<string> ptr(new string("abcde")); string* raw = ptr.release(); printString(raw); return 0; }

Результат выполнения кода:

"abcde"

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

  • метод get,
    который возвращает указатель на управляемый объект
  • метод reset,
    который заменяет управляемый объект
  • метод swap,
    который обменивает содержимое двух unique_ptr
  • класс unique_ptr,
    который представляет умный указатель с уникальным владением
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить