2009/3/11 ZaeX <zaex...@gmail.com>: > Hi, All: > > I used a "shared_ptr<A> const&" to store a ref of A in B; > Well, the constructor of B seems ok, the share_ptr<A> seems to be well > initialized; > but after the constructor, I found the the pointer silently become > 0xCCCCCCCC > > ///////////////////////////////////// below are the simplified class > definitions > class A{}; > > class B > { > private: > shared_ptr<A> const& m_ptr; > public: > B(shared_ptr<A> const& ptr):m_ptr(ptr) {cout<<m_ptr.get()<<endl;} > void ShowPtr(cout<<m_ptr.get()<<endl;) > } > /////////////////////////////////// below are my exporting code > > class_<B, auto_ptr<B> >("B", init<shared_ptr<A> const&>()) > .def("ShowPtr", &B::ShowPtr) > ; > class_<A, shared_ptr<A>, noncopyable >("A") > ; > /////////////////////////////////// below are python code > a = A() > b = B(a) #cout output the ptr of a > b.ShowPtr() #cout output 0xCCCCCCCC > > ============================================ > I'm quite confused by the behaviors here. Could you tell me what goes wrong?
You have to bind lifetime argument to the lifetime of the created object: http://www.boost.org/doc/libs/1_38_0/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies Constructors also have call policies and you can use them. Anyway, you will save to yourself a lot of time, if you will use shared_ptr by value. I suggest you to change your code. -- 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