Python C扩展中的循环引用

时间:2017-07-09 06:40:02

标签: python garbage-collection cython

我有一个Cython扩展类,它保存一个指向C ++类的共享指针。该类本身保留了一个指向Cython类的指针。

cdef class A
    cdef shared_ptr[B] thisptr

    def __init__(Basic self, name, *args, **kwargs):
        self.thisptr = create_b(<PyObject*>self)

我需要python对象保持活动,而thisptr是活着的,而thisptr在python对象存活时保持活着状态。 (C ++类B的设计是为了增加它在创建时存储的python对象的refcount,并且一旦C ++对象被销毁就减少refcount。)注意thisptr可能由其他Python对象共享,但是这个类是创建对象的那个。

这种情况会导致循环引用。

有没有办法指示python垃圾收集器认为这是一个循环引用并释放python对象,如果只有一个引用? (即来自C ++对象)

0 个答案:

没有答案