Назад к вопросам
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.