#include <iostream> #include <memory> class C { int n; public: C(int m) : n(m) { } ~C() { std::cerr << "C:~C" << std::endl; } int get() const { return n; } }; int main() { auto p = std::unique_ptr<C>(new C(1)); auto q = std::move(p); auto r = std::unique_ptr<C>(new C(2)); q = std::move(r); std::cout << q->get() << std::endl; }
こうですね。
C:~C 2 C:~C
しかし、
auto p = std::unique_ptr<C>(new C(1)); auto q = std::move(p); auto r = std::move(p); std::cout << r->get() << std::endl;
これだと実行時エラーというわけですね。
今度機会があったら使わせてもらいます。