т е как пример - можно бездумно везде тыкать шаред_птр и получать цикл ссылки. можно пойти дальше и использовать weak_ptr там, где полноценное владение объектом необязательно. можно пойти еще дальше и там, где объектом владеет кто-то один, использовать unique_ptr
это к тому, что в мире gc тебе все-равно, как объектом владеет gc, лишь бы объект был жив, пока он нужен. в ++/swift нужно немного заморочиться, но когда к этому привыкаешь, для тебя это уже не является минусом языка