我实现了这样的“私有实现类”:
#include <boost/shared_ptr.hpp>
class MyClassImpl;
class MyClass
{
public:
MyClass();
~MyClass();
int someFunc();
private:
boost::shared_ptr<MyClassImpl> * pimpl;
}
但在这种情况下,我使用了一个boost智能指针。我想隐藏boost依赖(为了避免用户必须使用boost来编译)什么是最好的解决方案?
非常感谢。
答案 0 :(得分:1)
您无法隐藏智能指针的依赖关系,因为它是“公共”类的一部分。
在C ++ 11中,如果要共享语义,请使用std::unique_ptr
或std::shared_ptr
。
如果你遇到过去,并且需要分享,那么你几乎无法使用或重新发明boost::shared_ptr
。如果您不需要共享,请使用std::auto_ptr
或带有析构函数的原始指针来删除对象。在这两种情况下,都应该声明复制构造函数和复制赋值运算符private,以防止意外复制指针。或者,您可以编写自己非常简单的不可复制的智能指针,类似于boost::scoped_ptr
。