Назад к вопросам
Junior — Middle
79
Объясните различия между умными указателями std::unique_ptr и std::shared_ptr в C++.
Компании, где спрашивали
Baum
Ответ от нейросети
sobes.tech AI
std::unique_ptr и std::shared_ptr — это умные указатели в C++, которые управляют временем жизни объектов, но имеют разные семантики владения:
-
std::unique_ptrвладеет объектом эксклюзивно. Он не копируемый, только перемещаемый. Когдаunique_ptrуничтожается, объект удаляется. Используется, когда нужен строгий контроль владения и нет необходимости в совместном использовании. -
std::shared_ptrреализует подсчёт ссылок. Несколькоshared_ptrмогут владеть одним объектом. Объект удаляется, когда последнийshared_ptr, владеющий им, уничтожается или переназначается.
Пример:
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> uptr = std::make_unique<int>(10);
// std::unique_ptr<int> uptr2 = uptr; // Ошибка: нельзя копировать
std::unique_ptr<int> uptr2 = std::move(uptr); // Перемещение владения
std::shared_ptr<int> sptr1 = std::make_shared<int>(20);
std::shared_ptr<int> sptr2 = sptr1; // Копирование, увеличивает счётчик ссылок
std::cout << *sptr1 << " " << *sptr2 << std::endl;
}