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

Метод swap

Метод swap класса unique_ptr обменивает содержимое двух умных указателей. После вызова метода первый указатель начинает владеть объектом, которым владел второй, и наоборот. При этом сами управляемые объекты не копируются и не уничтожаются - меняются только внутренние указатели и информация о владении. В качестве параметра метод принимает ссылку на другой объект unique_ptr того же типа.

Синтаксис

ptr1.swap(ptr2)

Пример

Давайте создадим два умных указателя и обменяем их содержимое с помощью метода swap:

#include <iostream> #include <memory> using namespace std; int main() { unique_ptr<int> ptr1(new int(1)); unique_ptr<int> ptr2(new int(2)); cout << "before: " << *ptr1 << " " << *ptr2 << endl; ptr1.swap(ptr2); cout << "after: " << *ptr1 << " " << *ptr2 << endl; return 0; }

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

"before: 1 2" "after: 2 1"

Пример

Метод swap удобно использовать для обмена владельцами объекта между двумя указателями. Давайте создадим один указатель с объектом, а второй оставим пустым, а затем обменяем их:

#include <iostream> #include <memory> using namespace std; int main() { unique_ptr<int> ptr1(new int(5)); unique_ptr<int> ptr2; ptr1.swap(ptr2); if (ptr1 == nullptr) { cout << "ptr1 is empty" << endl; } cout << "ptr2 holds: " << *ptr2 << endl; return 0; }

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

"ptr1 is empty" "ptr2 holds: 5"

Пример

Также можно использовать метод swap для безопасного освобождения ресурса. Если обменять указатель с пустым указателем, то объект будет уничтожен вместе с временным указателем:

#include <iostream> #include <memory> using namespace std; int main() { unique_ptr<int> ptr(new int(10)); unique_ptr<int> empty; ptr.swap(empty); if (ptr == nullptr) { cout << "resource released" << endl; } return 0; }

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

"resource released"

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

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