Avoid needless overhead of wrapping owner's deleter in deleter_wrapper if

shared_from_this has not been called yet, as Peter suggested
earlier.



[SVN r44448]
This commit is contained in:
Frank Mori Hess
2008-04-16 00:06:29 +00:00
parent 16828c9c0a
commit 9365853fde

View File

@ -93,17 +93,21 @@ public:
template<typename U>
void _internal_accept_owner(shared_ptr<U> &owner) const
{
init_internal_shared_once();
if( !_owned )
{
detail::sp_deleter_wrapper * pd = get_deleter<detail::sp_deleter_wrapper>(_internal_shared_this);
BOOST_ASSERT( pd != 0 );
pd->set_deleter(owner);
owner.reset( _internal_shared_this, owner.get() );
_internal_shared_this.reset();
if( !_internal_shared_this )
{
T * p = dynamic_cast<T *>(const_cast<enable_shared_from_this*>(this));
_internal_weak_this = shared_ptr<T>(owner, p);
}else
{
detail::sp_deleter_wrapper * pd = get_deleter<detail::sp_deleter_wrapper>(_internal_shared_this);
BOOST_ASSERT( pd != 0 );
pd->set_deleter(owner);
owner.reset( _internal_shared_this, owner.get() );
_internal_shared_this.reset();
}
_owned = true;
}
}