Sobes.tech
Назад к вопросам
Junior — Middle
97

Какова цель использования std::shared_ptr в C++ и чем он отличается от других умных указателей?

Компании, где спрашивали
МТСМТС
Baum
ГК Адепт

Ответ от нейросети

sobes.tech AI

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

Отличия от других умных указателей:

  • std::unique_ptr владеет объектом единолично, не поддерживает копирование, только перемещение.
  • std::weak_ptr — слабая ссылка на объект, управляемый shared_ptr, не увеличивает счётчик ссылок и не владеет объектом, используется для предотвращения циклических ссылок.

Пример использования:

#include <memory>
#include <iostream>

int main() {
    std::shared_ptr<int> p1 = std::make_shared<int>(42);
    {
        std::shared_ptr<int> p2 = p1; // счетчик ссылок увеличивается
        std::cout << *p2 << std::endl; // 42
    } // p2 уничтожается, счетчик уменьшается
    std::cout << *p1 << std::endl; // 42
} // p1 уничтожается, объект удаляется

Таким образом, shared_ptr удобен для совместного владения ресурсами с автоматическим управлением временем жизни объекта.