#include "ACMOJ-2095.hpp" #include struct koishi { int id; koishi() = default; koishi(int id) : id(id) {} }; std::ostream &operator<<(std::ostream &os, const koishi &k) { return os << "Komeiji Koishi " << k.id; } void test0() { using sjtu::unique_ptr; unique_ptr ptr1(new int(114514)); // 移交所有权 unique_ptr ptr2(std::move(ptr1)); // 释放所有权 int *tmp = ptr2.release(); delete tmp; } void test1() { using sjtu::unique_ptr; unique_ptr ptr1 = sjtu::make_unique(koishi(1)); // 这个行为可能是未定义的,但是我们要求其应该可以正常工作 ptr1 = std::move(ptr1); // 成员访问 ptr1->id = 514; // 解引用 std::cout << *ptr1 << std::endl; // 重置,现在 ptr1 应该为空 ptr1.reset(); if (!ptr1.get()) { std::cout << "ptr1 is empty!" << '\n'; } } signed main() { test0(); test1(); return 0; }