Передача владения unique_ptr в C++
Второй unique_ptr на тот же объект
скопировать нельзя: владение должно быть
единственным.
Передача владения делается функцией move
из utility: она превращает источник
в пустой указатель, а получатель забирает
объект. После присваивания старый владелец
больше не удаляет ресурс. Запишем класс Token:
#include <iostream>
#include <memory>
#include <utility>
class Token {
public:
int id;
Token(int id) : id(id) {}
};
Создадим два unique_ptr, перенесем объект
и выведем, что источник обнулился:
int main() {
std::unique_ptr<Token> first =
std::make_unique<Token>(7);
std::unique_ptr<Token> second =
std::move(first);
std::cout << second->id << "\n";
std::cout << (first.get() == nullptr) << "\n";
return 0;
}
Сделайте класс Badge с полем code.
Создайте два указателя unique_ptr,
передайте объект из первого во второй
через std::move и выведите 1,
если первый стал пустым.