【发布时间】:2016-01-17 16:45:06
【问题描述】:
为了避免循环头文件依赖,或者为了实现pimpl而进行前向声明是很常见的,那么最终可能会得到如下代码:
class A;
class B
{
A * a;
};
当尝试用 unique_ptr 替换它时:
class A;
class B
{
std::unique_ptr<A> a;
};
编译器抱怨。实现此功能的最佳做法是什么?
【问题讨论】:
-
确保在声明
std::unique_ptr<A>之前已定义A(而不仅仅是前向声明)。默认情况下,unique_ptr使用运算符delete(或变体)来释放对象,这需要使用基本的非类类型(int、枚举、联合等)或调用 @ 的析构函数987654330@/class类型(仅使用类的前向声明不会声明)。 -
只要定义所有需要知道完整类型的东西。 coliru.stacked-crooked.com/a/92407ffd3e333a97
-
@m.s.好吧,这个问题有点令人费解。我正在寻找简单的东西
标签: c++ unique-ptr