如何使用boost.Python包装c ++对象,以便Python永远不会自动将其称为析构函数

时间:2011-05-01 20:56:22

标签: c++ python boost

例如,我有C ++类“A”和python类“B”。用boost :: python包装的类“A”,所以我可以在我的python代码中使用它。类“B”有“A”类型的成员,我在“B”的构造函数中创建它。当我删除类“B”的对象时,它会自动在C ++中调用“A”的析构函数。我想避免这个调用,因此“B”不会对其成员“A”(即包装的c ++对象)负责。所以,我想删除我的“B”对象,并且在内存中仍然有“A”。

1 个答案:

答案 0 :(得分:0)

你应该将“B类”中的指针保存到“A类对象”中,这样​​当“B对象”被破坏时,“A类对象”不会被回收。

修改

我认为这可以解决您的问题:

aObjectPTR = POINTER(aObj)

现在,您有一个名为“aObjectPTR”的指针。 而不是“AObj”代替你的A类对象的名称。 之后,您有一个指向A类对象的指针,因此指针(aObjectPTR)将仅被回收,而不是它指向的对象。