Назад к вопросам
Junior — Middle
83
Можешь описать основные типы умных указателей в C++ и их особенности?
Компании, где спрашивали
Renga Software
Датаджайл
LestaGames
ГК Адепт
Ответ от нейросети
sobes.tech AI
В C++ существуют три основных типа умных указателей, которые помогают управлять динамической памятью и предотвращают утечки:
-
std::unique_ptr
- Обеспечивает уникальное владение объектом.
- Нельзя копировать, только перемещать.
- Автоматически удаляет объект при выходе из области видимости.
- Используется, когда объект должен иметь одного владельца.
-
std::shared_ptr
- Позволяет нескольким указателям совместно владеть объектом.
- Ведёт подсчёт ссылок (reference counting).
- Объект удаляется, когда последний shared_ptr уничтожается или переназначается.
- Подходит для случаев, когда объект нужен в нескольких местах.
-
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
}