unique_ptr(2)

#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;

これだと実行時エラーというわけですね。
今度機会があったら使わせてもらいます。