Sobes.tech
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 помогает избежать утечек памяти и облегчает управление временем жизни объектов.