3

我正在尝试使用对 python 可见的工厂创建和删除一个对象。
该对象具有私有构造函数和析构函数,并且工厂生命周期必须大于它创建的对象。
看起来下面的代码应该做到这一点:

class_<Factory>("Factory")
    .def("CreateObject", &Factory::CreateObject,
         return_internal_reference<1, return_value_policy<manage_new_object>>());

class_<Object, boost::noncopyable>("Object", no_init);

据我所知,它没有编译器或运行时错误。
问题是 boost 是如何知道如何销毁对象的?
我指定manage_new_object了它需要销毁它,但它不能调用析构函数,因为它是私有的,而且我没有提供工厂销毁方法的名称。
我该如何指定它?我可以添加另一个defFactory但这意味着 python 代码将不得不处理对象的破坏并且可以有悬空的对象。
我想要做的是当这个对象的引用计数达到 0 时,要么factory.DestroyObject(object)会被自动调用,要么甚至会调用我只提供对象作为参数的静态函数(工厂可以从对象中恢复)。

4

0 回答 0