我有一个无法在堆上创建的类,它有私有析构函数。
但是有一个函数可以返回指向这种构造对象的指针。我想从它做一个共享指针:
MyClass *GetMyClassPointer() {...}
boost::shared_ptr<MyClass> ptr;
ptr = boost::shared_ptr<MyClass>(GetMyClassPointer()); // [x]
错误:'MyClass :: ~MyClass()'是 私人
任何方式?
答案 0 :(得分:9)
是
听起来这个实例是由一个可以访问私有构造函数(成员或朋友)的函数动态分配的。然后应该有一个公共函数来清理实例,它可以访问私有析构函数(即使你没有)。
使用接受自定义删除器的shared_ptr
构造函数,并将其连接到类提供的清理函数(可能需要一个包装函数来使签名匹配)。