#include #include #include #include int cnt = 0; struct X { X() { ++cnt; } ~X() { --cnt; } virtual int id() const { return 1; } private: X(X const &); X& operator= (X const &); }; boost::unique_ptr return_unique_x() { return boost::unique_ptr(new X); } void use_unique_x(boost::unique_ptr && p) { assert(cnt == 1); boost::unique_ptr temp(std::move(p)); assert(cnt == 1); } int main() { using namespace boost; { unique_ptr p(new X); { unique_ptr q(new X); } } assert(cnt == 0); { unique_ptr p = return_unique_x(); assert(cnt == 1); } assert(cnt == 0); { use_unique_x(unique_ptr(new X)); assert(cnt == 0); } return EXIT_SUCCESS; }