[C++-sig] wrapper and shared_ptr - how to combine?

Leonard Ritter paniq at paniq.org
Sat Nov 15 20:48:13 CET 2008


I think I know what the issue is, and it indeed relates to a piece of code I
have not posted yet.

void Actor::add(const ActorPtr &actor) {
    assert(actor);
    assert(!actor->parent);
    actor->parent = ActorPtr(this);
    children.push_back(actor);
    queue_redraw();
}

Actor is a tree element with children and a parent pointer. I guess that
assigning ActorPtr(this) appears to construct a new pointer for an object
that is already registered to boost.python.

On Sat, Nov 15, 2008 at 7:07 PM, Leonard Ritter <paniq at paniq.org> wrote:

> yes, that's what i want. what details do you need? i mean, the problem
> posted is quite generic. i want to pass shared_ptr's of abstract classes
> with overridable methods back and forth from c++ to python and back. is this
> supposed to work, if yes, how?
>
>
> On Sat, Nov 15, 2008 at 5:20 PM, Stefan Seefeld <seefeld at sympatico.ca>wrote:
>
>> Leonard Ritter wrote:
>>
>>>
>>> class_<PyActor, ActorPtr, boost::noncopyable("Actor");
>>>
>>> which I did, but that gives me a compiler error if Actor is abstract, and
>>> if I declare it non-abstract, calls to wrapping PyActor methods fail in
>>> Python. I guess that this approach does not work with wrapper classes, or
>>> the syntax is different.
>>>
>> Please post specific code as well as specific error messages. It sounds as
>> if you expect those methods to return references to existing (shared)
>> objects, while boost.python expects by-value passing, i.e. wants to make
>> copies. But without more information this is just a guess.
>>
>> Regards,
>>      Stefan
>>
>> --
>>
>>     ...ich hab' noch einen Koffer in Berlin...
>>
>> _______________________________________________
>> Cplusplus-sig mailing list
>> Cplusplus-sig at python.org
>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20081115/821092d8/attachment-0001.htm>


More information about the Cplusplus-sig mailing list