Назад к вопросам
Junior — Middle
80
Каким образом происходит присваивание ресурсов у объекта std::unique_ptr?
Ответ от нейросети
sobes.tech AI
std::unique_ptr — это умный указатель, который владеет уникальным ресурсом (обычно динамически выделенным объектом). Присваивание ресурсов у std::unique_ptr происходит через перемещение (move semantics), а не копирование, поскольку копирование запрещено для уникальных указателей.
Когда вы присваиваете один std::unique_ptr другому, происходит перенос владения ресурсом от источника к приёмнику. После этого исходный указатель становится пустым (null), а новый владеет ресурсом.
Пример:
#include <memory>
#include <iostream>
int main() {
std::unique_ptr<int> ptr1 = std::make_unique<int>(42);
std::unique_ptr<int> ptr2;
// Перемещение владения ресурсом от ptr1 к ptr2
ptr2 = std::move(ptr1);
if (!ptr1) {
std::cout << "ptr1 теперь пустой" << std::endl;
}
std::cout << "ptr2 владеет значением: " << *ptr2 << std::endl;
return 0;
}
Таким образом, присваивание у std::unique_ptr реализуется через оператор перемещения, что обеспечивает уникальность владения ресурсом.