隐藏标题中的依赖项

时间:2013-12-16 17:52:28

标签: c++ boost header static-libraries private

我实现了这样的“私有实现类”:

#include <boost/shared_ptr.hpp>

class MyClassImpl;

class MyClass
{
    public:
        MyClass();
        ~MyClass();
        int someFunc();

    private:
        boost::shared_ptr<MyClassImpl> * pimpl;
}

但在这种情况下,我使用了一个boost智能指针。我想隐藏boost依赖(为了避免用户必须使用boost来编译)什么是最好的解决方案?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您无法隐藏智能指针的依赖关系,因为它是“公共”类的一部分。

在C ++ 11中,如果要共享语义,请使用std::unique_ptrstd::shared_ptr

如果你遇到过去,并且需要分享,那么你几乎无法使用或重新发明boost::shared_ptr。如果您不需要共享,请使用std::auto_ptr或带有析构函数的原始指针来删除对象。在这两种情况下,都应该声明复制构造函数和复制赋值运算符private,以防止意外复制指针。或者,您可以编写自己非常简单的不可复制的智能指针,类似于boost::scoped_ptr