如何使用带有前向声明类型的unique_ptr?

时间:2015-10-19 11:00:22

标签: c++ unique-ptr

为了避免循环头文件依赖,或者为了实现pimpl而拥有前向声明是很常见的,那么最终会得到如下代码:

class A;

class B
{
  A * a;
};

当试图用unique_ptr替换它时:

class A;

class B
{
  std::unique_ptr<A> a;
};

编译器抱怨。让这个工作的最佳做​​法是什么?

1 个答案:

答案 0 :(得分:0)

需要声明封闭类B的析构函数,并在源文件中将其设置为default,以便unique_ptr不会强制内联其自己的默认删除器。

class B
{
  public:
  ~B();
  private:
  std::unique_ptr<A> a;
};

并在源文件中

#include <A.h>
... do stuff with ( a )
B::~B() = default;

应该做的工作。