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