[C++-sig] shared_ptr -> weak_ptr -> shared_ptr
Andreas Beyer
beyer at imb-jena.de
Wed Apr 13 23:14:44 CEST 2005
Hi.
I would like to transform a shared pointer originating from a python
object to a weak pointer. Later I would like to transform it back to a
shared pointer. For some strange reason I keep getting seg-faults when
trying to lock the weak pointer.
Is there any danger in storing shared pointers from python objects as
weak pointers?
According to the weak pointer's docu, lock() returns an empty shared_ptr
if the refered object expired. However, in my example this shouldn't be
the case anyway.
The test case:
using namespace boost;
struct A { };
typedef shared_ptr<A> A_ptr_shared;
typedef weak_ptr<A> A_ptr_weak;
void transform(A_ptr_shared a) {
std::cerr << a.get() << std::endl;
A_ptr_weak aw(a);
std::cerr << "have weak" << std::endl;
A_ptr_shared as = aw.lock(); // boom!
std::cerr << "lock is ok" << std::endl;
std::cerr << as.get() << std::endl;
}
BOOST_PYTHON_MODULE(ptr_test) {
python::class_<A> ("A");
python::register_ptr_to_python< A_ptr_shared >();
python::def("transform", &transform);
}
The python session:
>>> from ptr_test import *
>>> a=A()
>>> transform(a)
0x8190a58
have weak
Segmentation fault (core dumped)
More information about the Cplusplus-sig
mailing list