Объяснение
RAII связывает ресурс со временем жизни объекта. Деструктор освобождает ресурс при обычном выходе и раскрутке стека исключением. unique_ptr выражает единственного владельца, shared_ptr — совместное владение.
Задача для самостоятельного решения
Почему цикл shared_ptr может удерживать объекты навсегда?
Показать разбор ответа
Каждый объект увеличивает счётчик другого. Один из обратных указателей должен быть невладеющим weak_ptr, иначе счётчики не станут нулевыми.