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

Каким образом реализована умная указатель unique_ptr и как он управляет владением объектом?

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

sobes.tech AI

unique_ptr — это умный указатель в C++, который обеспечивает уникальное владение динамически выделенным объектом. Он гарантирует, что объект будет автоматически удалён, когда unique_ptr выйдет из области видимости, предотвращая утечки памяти.

Особенности unique_ptr:

  • Владение объектом может быть только у одного unique_ptr в любой момент времени.
  • Копирование unique_ptr запрещено (конструктор копирования удалён), но разрешено перемещение (move semantics).
  • При перемещении владение передаётся новому указателю, а старый становится пустым.

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

#include <memory>
#include <iostream>

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

int main() {
    std::unique_ptr<Foo> p1 = std::make_unique<Foo>();
    p1->bar();

    // Передача владения
    std::unique_ptr<Foo> p2 = std::move(p1);
    if (!p1) {
        std::cout << "p1 больше не владеет объектом\n";
    }
    p2->bar();

    // Объект автоматически удалится при выходе p2 из области видимости
    return 0;
}

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