
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 http://boostoleg.narod.ru/examples.htm) ?
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. http://boost.org/libs/smart_ptr/enable_shared_from_this.html http://boost.org/libs/smart_ptr/sp_techniques.html#from_this If D is intrusively counted, I can also return a shared_ptr that does intrusive_ptr_release on it, similar to: http://boost.org/libs/smart_ptr/sp_techniques.html#intrusive 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.