Тема: smart pointers, memory leaks та garbage collection загалом
Всім привіт
В мене зараз в голові дуже багато питань і взагалі повна каша, тому перейду до суті
В мовах в яких є GC, чи працюючи в с++ з розумними вказівниками меморі лік отримати можна тільки через проблему циклічних посилань(чи є ще якісь?), коли маємо шось типу
p1 = p2
p2 = p1
але що це спричиняє?
кажуть що це трапляється через те, що лічильник кожного вказівника не зможе зменшитись (стати < 2) і відповідно GC не зможе почистити ту пам'ять на яку вони вказують, бо на неї вічно існуватимуть посилання
але чому? хіба при виході з такого скоупу ці вказівники не почнуть знищуватись (р2, р1) тим самим декрементуючи свій лічильник і в кінцевому результаті не очистять пам'ять?
{
p1 = p2
p2 = p1
}
чи я якось неправильно зрозумів проблему?
ну і я чув що ця проблема вирішується певним чином weak_ptr'ами, бо їхнє посилнання не є значущим, тобто через них лічильник не збільшуватиметься
та і взагалі в с++ смартпоінтери ж можна вважати як певного роду реалізацію збирача сміття, чи не так?
можливо я тут взагалі напутав праведне з грішним(думаю шо десь точно та )
тож допоможіть мені систематизувати весь цей сумбур)