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 обеспечивает автоматическое и безопасное управление динамической памятью, предотвращая утечки и двойное удаление.