Назад к вопросам
Открытые Решения
Junior — Middle
85
Какие существуют разновидности умных указателей в C++?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В C++ существуют несколько основных разновидностей умных указателей, которые помогают управлять временем жизни объектов и предотвращать утечки памяти:
-
std::unique_ptr— обеспечивает уникальное владение объектом. Объект уничтожается, когдаunique_ptrвыходит из области видимости. Нельзя копировать, но можно перемещать. -
std::shared_ptr— реализует подсчет ссылок. Несколько указателей могут владеть одним объектом, который уничтожается, когда последнийshared_ptrудаляется. -
std::weak_ptr— слабая ссылка на объект, управляемыйshared_ptr. Не влияет на время жизни объекта, используется для предотвращения циклических ссылок.
Пример использования:
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> p1 = std::make_unique<int>(42);
// std::unique_ptr<int> p2 = p1; // Ошибка копирования
std::unique_ptr<int> p2 = std::move(p1); // Перемещение владения
std::shared_ptr<int> sp1 = std::make_shared<int>(100);
std::shared_ptr<int> sp2 = sp1; // Подсчет ссылок увеличивается
std::weak_ptr<int> wp = sp1; // Не увеличивает счетчик ссылок
std::cout << *sp2 << std::endl; // 100
}