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 обеспечивает автоматическое и безопасное управление временем жизни объекта через подсчёт активных ссылок.