c++ - 如何将 unique_ptr 与前向声明类型一起使用?

标签 c++ unique-ptr

<分区>

前向声明以避免循环头文件依赖性或实现 pimpl 是很常见的,那么最终可能会得到如下代码:

class A;

class B
{
  A * a;
};

当有人试图用 unique_ptr 替换它时:

class A;

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

编译器报错。让这项工作发挥作用的最佳做法是什么?

最佳答案

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

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

在源文件中

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

应该完成这项工作。

关于c++ - 如何将 unique_ptr 与前向声明类型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33212686/

相关文章:

c++ - 指向 unique_ptr 的指针——这是一个漏洞吗?

c++ - move 构造函数 C++11

c++ - 为什么插入用户定义的析构函数需要用户定义的复制构造函数

递归表达式类中的 C++ 运算符重载

c++ - 我想知道当函数在其中创建对象时会发生什么

c++ - 在 MPI、C++ 中发送动态数组

c++ - 如何编写指针和数据为 const 的 unique_ptr

C++0x 将不再有概念。意见?这将如何影响你?

c++ - 如何使用 QResource 读取文件?

c++ - Visual Studio _CrtDumpMemoryLeaks 总是跳过对象转储