Sobes.tech
Back to questions
Junior — Middle
81

Каким образом происходит присваивание ресурсов у объекта std::unique_ptr?

Answer from AI

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 реализуется через оператор перемещения, что обеспечивает уникальность владения ресурсом.