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