如何使用boost.Python封装C++对象,以防Python自动调用其析构函数
比如说,我有一个C++的类叫"A",还有一个Python的类叫"B"。类"A"是用boost::python包装过的,这样我就可以在我的Python代码里使用它。类"B"里面有一个类型为"A"的成员,我是在"B"的构造函数里创建这个成员的。当我删除类"B"的对象时,它会自动调用C++中"A"的析构函数。我想避免这个调用,这样"B"就不需要负责它的成员"A"(也就是那个被包装的C++对象)。所以,我想删除我的"B"对象,但仍然希望"A"在内存中存在。
1 个回答
0
你应该在你的“B类”中保留一个指向“A类对象”的指针。这样,当“B对象”被销毁时,“A类对象”就不会被回收。
编辑:
我觉得这样可以解决你的问题:
aObjectPTR = POINTER(aObj)
现在,你有一个叫“aObjectPTR”的指针。把“AObj”替换成你的A类对象的名字。这样,你就有了一个指向A类对象的指针,这个指针(aObjectPTR)只会被回收,而它指向的对象不会被回收。