Sobes.tech
Back to questions
Junior — Middle
78

Объясните различия между умными указателями std::unique_ptr и std::shared_ptr в C++.

Companies where asked
Baum

Answer from AI

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;
}