Sobes.tech
Назад к вопросам
Junior — Middle
93

Можете объяснить принцип работы умных указателей и как они управляют памятью?

Компании, где спрашивали
Датаджайл

Ответ от нейросети

sobes.tech AI

Умные указатели — это объекты-обёртки над обычными указателями, которые автоматически управляют временем жизни динамически выделенной памяти, предотвращая утечки и ошибки двойного освобождения.

Основные типы умных указателей в C++:

  • std::unique_ptr — владеет объектом эксклюзивно, не допускает копирования, только перемещение. При уничтожении умного указателя память освобождается.
  • std::shared_ptr — реализует подсчёт ссылок. Память освобождается, когда последний shared_ptr, указывающий на объект, уничтожается.
  • std::weak_ptr — слабая ссылка на объект, управляемый shared_ptr, не влияет на время жизни объекта, используется для предотвращения циклических ссылок.

Пример использования std::shared_ptr:

#include <memory>
#include <iostream>

struct Foo {
    Foo() { std::cout << "Foo создан\n"; }
    ~Foo() { std::cout << "Foo уничтожен\n"; }
};

int main() {
    std::shared_ptr<Foo> sp1 = std::make_shared<Foo>();
    {
        std::shared_ptr<Foo> sp2 = sp1; // увеличивается счётчик ссылок
        std::cout << "Внутри блока\n";
    } // sp2 уничтожается, счётчик уменьшается
    std::cout << "Вне блока\n";
} // sp1 уничтожается, объект Foo удаляется

Таким образом, умные указатели помогают безопасно управлять памятью без явного вызова delete.