C++;Python对象中的对象包装器未销毁 我注意到,当Python对象被释放时,在Python对象中包裹的C++对象没有被破坏。
下面是我使用CPython C API的类型定义:C++;Python对象中的对象包装器未销毁 我注意到,当Python对象被释放时,在Python对象中包裹的C++对象没有被破坏。,python,c++,cpython,Python,C++,Cpython,下面是我使用CPython C API的类型定义: typedef struct { PyObject_HEAD CppFoo fooObj; std::vector<Py_ssize_t> size; } FooObject; 在Python中调用以下代码时,调试器会命中FooObject_dealloc: >>>myfoo=Foo() >>>del myfoo 但是,即使在tp_init中调用了构造函数,也没有调用C
typedef struct {
PyObject_HEAD
CppFoo fooObj;
std::vector<Py_ssize_t> size;
} FooObject;
在Python中调用以下代码时,调试器会命中FooObject_dealloc:
>>>myfoo=Foo()
>>>del myfoo
但是,即使在tp_init中调用了构造函数,也没有调用CppFoo的析构函数。这怎么会发生?当myfoo被释放时,CppFoo的析构函数不应该自动调用吗?应采取什么措施避免fooObj泄漏
编辑:
在创建类型时,我基本上遵循了教程:
<> P>不同的是,在C++中,在C++对象中添加了C++对象,而不是int或PyObjy*,C++中,使用动态内存构造对象包括两个步骤:
>>>myfoo=Foo()
>>>del myfoo