This is a known problem. Boost.Python builds shared_ptr instances when calling
your functions, using a custom deleter. I think internally it just uses regular
Python reference counting to manage the lifetime of your KBObject.
Unfortunately I don't have a nice suggestion for you. A few years ago I worked
around the issue in this way:
struct KBOject_data {
std::string name;
};
struct KBOject {
boost::shared_ptr<KBOject_data> data;
};
I.e. by hiding the shared_ptr from Boost.Python.
It isn't pretty. Maybe someone else has a better solution?
(I've always been wondering if enable_shared_from_this could make this nice.)
----- Original Message ----
From: Jahn Fuchs <[email protected]>
To: [email protected]
Sent: Wed, November 25, 2009 8:16:58 AM
Subject: [C++-sig] boost python and weak_ptr from a shared_ptr argument
Hello boost python users,
I really like boost python but I stumbled in a problem I don't know how to
solve, maybe you have an idea:
I have a class KnowledgeBase that holds an shared_ptr to an KBObject and also a
weak_ptr to an KBObject. If I set the shared_ptr with the set_shared_ptr
function it works fine, but it doesn't work with the set_weak_ptr function
(which takes a shared_ptr as an argument) ...
see the following C++ code, python export code and python test code to see what
i mean. I made a simple example which I also tested and it shows the problem I
have.
Thank you in advance.
jahn.
_______________________________________________
Cplusplus-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig