使用自定义删除器的Boost :: Python对象

时间:2012-07-28 13:05:19

标签: memory-management boost boost-python

我正在尝试使用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);

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

0 个答案:

没有答案