Back to questions
Junior — Middle
82
Можете объяснить механизм работы умного указателя std::shared_ptr в C++?
Answer from AI
sobes.tech AI
std::shared_ptr — это умный указатель в C++, который реализует подсчёт ссылок на объект в динамической памяти. Он позволяет нескольким указателям совместно владеть одним объектом, автоматически освобождая память, когда последний shared_ptr перестаёт ссылаться на объект.
Основные моменты работы std::shared_ptr:
- При создании
shared_ptrвыделяется объект и создаётся счётчик ссылок, равный 1. - При копировании
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
std::cout << *p1 << std::endl; // 42
} // p1 уничтожается, счетчик = 0, память освобождается
Таким образом, shared_ptr помогает избежать утечек памяти и облегчает управление временем жизни объектов.