Метод reset
Метод reset класса unique_ptr заменяет объект, которым владеет умный указатель. Он принимает один необязательный параметр - новый указатель, который становится управляемым. Если параметр не передан, unique_ptr освобождает текущий объект и становится пустым. Если параметр передан, старый объект удаляется, а владение передается новому указателю.
Синтаксис
ptr.reset([new_ptr]);
Пример
Давайте создадим unique_ptr с указателем на число 5, а затем сбросим его, передав новый указатель на число 10:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr(new int(5));
cout << *ptr << endl;
ptr.reset(new int(10));
cout << *ptr << endl;
return 0;
}
Результат выполнения кода:
5
10
Пример
Давайте вызовем метод reset без параметров, чтобы освободить объект и сделать указатель пустым:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr(new int(42));
cout << *ptr << endl;
ptr.reset();
if (ptr == nullptr) {
cout << "ptr is null" << endl;
}
return 0;
}
Результат выполнения кода:
42
"ptr is null"
Пример
Давайте передадим владение от одного unique_ptr другому с помощью метода reset и release:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
unique_ptr<int> ptr1(new int(7));
unique_ptr<int> ptr2;
ptr2.reset(ptr1.release());
cout << *ptr2 << endl;
cout << (ptr1 == nullptr) << endl;
return 0;
}
Результат выполнения кода:
7
1
Смотрите также
-
класс
unique_ptr,
который представляет умный указатель с уникальным владением -
метод
get,
который возвращает сырой указатель на управляемый объект -
метод
release,
который освобождает владение и возвращает сырой указатель -
метод
swap,
который обменивает содержимое двух умных указателей