Thanks Roman, I think I will take the advice to try working around this problem.
On Thu, Mar 12, 2009 at 1:17 PM, Roman Yakovenko <roman.yakove...@gmail.com>wrote: > 2009/3/11 ZaeX <zaex...@gmail.com>: > > Hi,Roman: > > > > I have tried adding call policy on my constructor, but I'm really no good > at > > this. > > I have tried all the combinations below but none of them work: > > > > init<shared_ptr<A> const& >()[with_custodian_and_ward_postcall<0, 2> >()] > > init<shared_ptr<A> const& >()[with_custodian_and_ward_postcall<1, 2> >()] > > init<shared_ptr<A> const& >()[return_internal_reference<1, > > with_custodian_and_ward<1, 2> >()] > > init<shared_ptr<A> const& >()[return_internal_reference<1, > > with_custodian_and_ward<0, 2> >()] > > > > Could you give some more advice on this? > > P.S.: > > I cannot modify the code back to use shared_ptr by value here, I have to > > break cyclic reference. And I think weak_ptr is no good idea, if I lock > it > > 60 times per second for each object, I guess it would be an impact on > > performance. > > I don't know for sure, how to solve this problem. I can propose > work-around, which may be will work for you. > In your case, you have to keep shared_ptr<A> somewhere, until instance > of B will die. So, you already do some kind of memory management. > > I suggest you to change your code as following: > struct no_delete_a{ > void operator(A*){} > }; > > class A{}; > > class B > { > private: > shared_ptr<A> const m_ptr; > public: > B(shared_ptr<A> const& ptr):m_ptr(ptr.get(), no_delete_a() ) > {cout<<m_ptr.get()<<endl;} > void ShowPtr(cout<<m_ptr.get()<<endl;) > } > > In short to use "shared_ptr" custom deleter functionality. > > You don't hurt performance and can switch to use "shared_ptr by > value"( and not to hurt your self :-) ) > > HTH > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > http://mail.python.org/mailman/listinfo/cplusplus-sig > -- Time is mana, we must hurry
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig