Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2004-11-02 15:33:57

Oleg Fedtchenko wrote:
>> Peter Dimov wrote:
>> No.
>>> in reply to Oleg Fedtchenko's:
>>> Is it possible to implement the next example using global
>>> functions as specified above?
>>> class D
>>> {
>>> private:
>>> WORD m_wData;
>>> public:
>>> D(){ m_wData = 0;}
>>> virtual shared_ptr<WORD> GetData( shared_ptr<D> this_ )
> Is it worth using the proposed *member_ptr* smart pointer
> (e.g. for the tasks discussed in the previous messages or
> like those described at ?

I'm not sure. In a situation like the above I'd probably go with
enable_shared_from_this. member_ptr also seems to require a base class, so
it's a tie, except that the returned pointer is a shared_ptr: more
"standard" and supports weak pointers.

If D is intrusively counted, I can also return a shared_ptr that does
intrusive_ptr_release on it, similar to:

but storing a different pointer in the deleter, like:

shared_ptr<WORD> pw( &this->m_wData, bind( intrusive_deleter<D>(), this ) );

It seems that your member_ptr can be emulated with

shared_ptr<WORD> pw( &this->m_wData,
  bind( &member_ptr_owner_base::release, this )

but I may be wrong; I looked at it only briefly.

Boost list run by bdawes at, gregod at, cpdaniel at, john at