Sobes.tech
Back to questions
Junior — Middle
84

Какие существуют разновидности умных указателей в C++?

Companies where asked
Открытые РешенияОткрытые Решения

Answer from AI

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
}