Слабый указатель 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 еще существует.