Sobes.tech
Back to questions
Junior — Middle
85

Можно объяснить, как реализована умная указатель std::shared_ptr и как он управляет памятью?

Answer from AI

sobes.tech AI

std::shared_ptr — это умный указатель в C++, который реализует подсчёт ссылок для управления временем жизни объекта. Он хранит указатель на объект и счётчик ссылок, который показывает, сколько shared_ptr указывает на этот объект.

Когда создаётся shared_ptr, счётчик ссылок инициализируется единицей. При копировании shared_ptr счётчик увеличивается, при уничтожении — уменьшается. Когда счётчик достигает нуля, объект автоматически удаляется.

Пример:

#include <memory>
#include <iostream>

int main() {
    std::shared_ptr<int> p1 = std::make_shared<int>(42); // счетчик = 1
    {
        std::shared_ptr<int> p2 = p1; // счетчик = 2
        std::cout << *p2 << std::endl; // 42
    } // p2 уничтожается, счетчик = 1
    // объект всё ещё жив
} // p1 уничтожается, счетчик = 0, объект удаляется

Таким образом, shared_ptr обеспечивает автоматическое и безопасное управление динамической памятью, предотвращая утечки и двойное удаление.