使用boost::python包装含有私有析构函数的类是行不通的。也就是说单例一般也是没办法直接包装的,当然可以曲线实现
编译出错如下:
boost\python\object\value_holder.hpp(134) : error C2248: “XXXCLASS::XXXCLASS”: 无法访问 private 成员(在“XXXCLASS”类中声明),参见XXXCLASS的声明,例如:
class A
{
~A(){}
}
也就是这个类不能直接在栈上实例化的,如果实例化对象,也会报c2248错误,无法访问private成员。
boost::python封装此类为啥报错:
Class template class_<T, Bases, HeldType, NonCopyable>
这个模板类导出c++类时,导出的类时作为value_holer这个类的数据成员的,相当于实例化,所以会出现一开始的错误。
解决方法:
将这个类再包装一个普通类或者直接用c接口导出
私有析构的作用:
1、禁止用户调用delete删除此对象。容易多次调用delete产生非法行为
2、禁止实例化对象
构造私有作用:
1、构造函数如果也是私有的,在堆上也不允许创建对象。也不能派生子类