Метод 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,
который представляет умный указатель с уникальным владением