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

Метод reset

Метод reset класса shared_ptr разрывает связь умного указателя с текущим управляемым объектом. Если в момент вызова это был последний владелец, объект уничтожается и память освобождается. Первым параметром метод может принимать новый сырой указатель, которым следует управлять, а вторым - пользовательский удалитель. Оба параметра необязательны: без аргументов reset просто делает указатель пустым.

Синтаксис

ptr.reset() ptr.reset(new_ptr) ptr.reset(new_ptr, deleter)

Пример

Давайте создадим shared_ptr на число 1 и посмотрим, что произойдёт после вызова reset без параметров:

#include <iostream> #include <memory> using namespace std; int main() { shared_ptr<int> ptr = make_shared<int>(1); cout << *ptr << endl; ptr.reset(); if (ptr == nullptr) { cout << "ptr is empty" << endl; } return 0; }

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

1 "ptr is empty"

Пример

Давайте заменим управляемый объект на новый, передав указатель в reset:

#include <iostream> #include <memory> using namespace std; int main() { shared_ptr<int> ptr = make_shared<int>(1); cout << *ptr << endl; ptr.reset(new int(2)); cout << *ptr << endl; return 0; }

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

1 2

Пример

Давайте убедимся, что при вызове reset объект освобождается только тогда, когда указатель был последним владельцем:

#include <iostream> #include <memory> using namespace std; int main() { shared_ptr<int> ptr1 = make_shared<int>(1); shared_ptr<int> ptr2 = ptr1; cout << ptr1.use_count() << endl; ptr1.reset(); cout << ptr2.use_count() << endl; cout << *ptr2 << endl; return 0; }

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

2 1 1

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

  • класс shared_ptr,
    который представляет умный указатель с общим владением
  • метод get,
    который возвращает сырой указатель
  • метод use_count,
    который возвращает количество владельцев
  • функция make_shared,
    которая создаёт shared_ptr с новым объектом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить