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

Можешь описать основные типы умных указателей в C++ и их особенности?

Компании, где спрашивали
Renga Software
Датаджайл
LestaGames
ГК Адепт

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

sobes.tech AI

В C++ существуют три основных типа умных указателей, которые помогают управлять динамической памятью и предотвращают утечки:

  1. std::unique_ptr

    • Обеспечивает уникальное владение объектом.
    • Нельзя копировать, только перемещать.
    • Автоматически удаляет объект при выходе из области видимости.
    • Используется, когда объект должен иметь одного владельца.
  2. std::shared_ptr

    • Позволяет нескольким указателям совместно владеть объектом.
    • Ведёт подсчёт ссылок (reference counting).
    • Объект удаляется, когда последний shared_ptr уничтожается или переназначается.
    • Подходит для случаев, когда объект нужен в нескольких местах.
  3. std::weak_ptr

    • Слабая ссылка на объект, управляемый shared_ptr.
    • Не влияет на подсчёт ссылок.
    • Используется для предотвращения циклических ссылок, которые могут привести к утечкам.
    • Для доступа к объекту нужно преобразовать weak_ptr в shared_ptr через lock().

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

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<int> ptr = std::make_unique<int>(42);
    std::cout << *ptr << std::endl; // Выведет 42
    // ptr автоматически удалит память при выходе из main
}