
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Sunday 07 March 2010, Daniel F. wrote:
I would also like to express my interest in a solution to the enable_shared_from_this/python problem. In my opinion providing an adequate solution would really benefit boost::python and I'm glad to see work is being done. I've checked out the latest code from svn and played around with it. I had to modify enable_shared_from_raw.hpp slightly in order to get it to compile (mainly insert esft2_deleter_wrapper from the old enable_shared_from_this2.hpp).
What errors did you see? Can you provide a test program which shows the errors? The trunk works fine for me. esft2_deleter_wrapper is defined in shared_ptr.hpp right above get_deleter.
The results look good: the RuntimeError is gone, the objects are being destroyed. Unfortunately, I only know little about the inner workings smart pointers and even less about boost::python, so the before mentioned code should be regarded with caution. So far, I've discovered one case where this breaks, i.e. the following python code "obj2 = obj2.shared()" causes the assertion in the destructor of enable_shared_from_raw to fail. I'll assume that this is work in progress (or really difficult to solve).
I don't know anything about Boost.Python, but the assertion will fail if you create a shared_ptr with shared_from_raw() and then the object is destroyed before ever being given to an external shared_ptr. It's fine if the external shared_ptr has a null deleter, but you have to construct such a shared_ptr explicitly if that's what you want. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAkuWdy8ACgkQ5vihyNWuA4WkpgCggqvLM1ImFLmyYA+R7GqT+PDe L/MAoIA5IRf9vpV/39inCU5GJZ2+Yy0M =stxS -----END PGP SIGNATURE-----