Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpSpWk 136 of 150 menu
◀ ▶

Слабый указатель weak_ptr в C++

Указатель shared_ptr держит объект живым, пока живет хотя бы одна его копия.

Указатель weak_ptr смотрит на объект, но не удерживает его: счетчик shared_ptr от него не растет. Когда последний shared_ptr исчезает, объект удаляется, а weak_ptr остается пустым. Запишем класс Relay с деструктором:

#include <iostream> #include <memory> class Relay { public: ~Relay() { std::cout << "relay gone\n"; } };

Создадим объект, сбросим сильный указатель и выведем слово из деструктора:

int main() { std::shared_ptr<Relay> strong = std::make_shared<Relay>(); std::weak_ptr<Relay> watch = strong; strong.reset(); std::cout << "after reset\n"; return 0; }

Сделайте класс Lamp с деструктором, печатающим dark. Создайте shared_ptr, сохраните weak_ptr на тот же объект, вызовите reset у сильного указателя и убедитесь, что dark появляется, хотя weak_ptr еще существует.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить