Sobes.tech
Back to questions
Junior — Middle
85

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

Answer from AI

sobes.tech AI

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

Пример:

#include <memory>
#include <iostream>

struct Foo {
    Foo() { std::cout << "Foo создан\n"; }
    ~Foo() { std::cout << "Foo уничтожен\n"; }
};

int main() {
    std::shared_ptr<Foo> sp1 = std::make_shared<Foo>(); // создаётся объект и счётчик = 1
    {
        std::shared_ptr<Foo> sp2 = sp1; // счётчик увеличивается до 2
    } // sp2 уничтожается, счётчик уменьшается до 1
    // при выходе из main sp1 уничтожается, счётчик становится 0, объект удаляется
}

Таким образом, std::shared_ptr обеспечивает автоматическое и безопасное управление временем жизни объекта через подсчёт активных ссылок.