一旦python主机对象被取消引用,就释放SWIG包装的对象?

2024-09-28 05:18:18 发布

您现在位置:Python中文网/ 问答频道 /正文

<>我试着用这种方法来编写一个C++类:

class Test {
 public:
  Test()  {printf("Construct\n");}
  ~Test() {printf("Deconstruct\n");}
};

假设swig包装的模块是pytest,我尝试了以下代码:

^{pr2}$

我看到了预期的输出“Construct”。然而,有时我看不到输出“解构”。我猜想这是因为当我释放字典^ {< CD3}}时,保存^ {< CD2> } C++对象的对象没有被释放。所以我试了一下:

import gc
gc.collect()

我还是看不到“解构”。我在离开ipython shell时看到的。所以我的问题是(1)我如何明确地让Python在没有被引用时释放这些被Sigg包裹的C++对象;(2)有没有一种方法让Python在一个被宿主的Python对象被撤销后立即被释放的对象的行为?在

编辑:

当我执行以下操作时,可能会出现问题:

x = dict(a=pytest.Test())
x
del x

第二个命令是在我试图检查x是什么时发出的。然后从ipython中的Out列表中引用该对象。在

所以现在我的问题是:是否保证gc.collect()将删除所有未引用的变量(即,调用它们的__del__)?在


Tags: 对象方法testpytestipythonpublicconstructgc

热门问题