std:: unique_ptr , std:: move , unique_ptr :
std::unique_ptr<X> x;
std::unique_ptr<Y> y { new Y };
x = std::move(y);
, unique_ptr , .
template < typename T, typename = typename std::enable_if< std::is_base_of<X,T>::value>::type >
void foo( std::unique_ptr<T> & ) {
}
, , , unique_ptr rvalue, , .
void bar( std::unique_ptr<X> && ) {
}
bar( std::move(y) );