forked from boostorg/smart_ptr
Add intrusive_ptr converting move assignment.
This commit is contained in:
@ -139,6 +139,13 @@ public:
|
|||||||
rhs.px = 0;
|
rhs.px = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class U>
|
||||||
|
intrusive_ptr & operator=(intrusive_ptr<U> && rhs) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
this_type( static_cast< intrusive_ptr<U> && >( rhs ) ).swap(*this);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
intrusive_ptr & operator=(intrusive_ptr const & rhs)
|
intrusive_ptr & operator=(intrusive_ptr const & rhs)
|
||||||
|
@ -182,6 +182,33 @@ int main()
|
|||||||
BOOST_TEST( N::base::instances == 0 );
|
BOOST_TEST( N::base::instances == 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::intrusive_ptr<Y> p( new Y );
|
||||||
|
BOOST_TEST( N::base::instances == 1 );
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> p2;
|
||||||
|
p2 = std::move( p );
|
||||||
|
BOOST_TEST( N::base::instances == 1 );
|
||||||
|
BOOST_TEST( p.get() == 0 );
|
||||||
|
|
||||||
|
p2.reset();
|
||||||
|
BOOST_TEST( N::base::instances == 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::intrusive_ptr<Y> p( new Y );
|
||||||
|
BOOST_TEST( N::base::instances == 1 );
|
||||||
|
|
||||||
|
boost::intrusive_ptr<X> p2( new X );
|
||||||
|
BOOST_TEST( N::base::instances == 2 );
|
||||||
|
p2 = std::move( p );
|
||||||
|
BOOST_TEST( N::base::instances == 1 );
|
||||||
|
BOOST_TEST( p.get() == 0 );
|
||||||
|
|
||||||
|
p2.reset();
|
||||||
|
BOOST_TEST( N::base::instances == 0 );
|
||||||
|
}
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user