Is
struct A
{
std::unique_ptr<A> a;
};
标准允许这样做吗?我认为对于像std::set
这样的容器类型不允许,但是unique_ptr
有什么特殊之处吗?
Is
struct A
{
std::unique_ptr<A> a;
};
标准允许这样做吗?我认为对于像std::set
这样的容器类型不允许,但是unique_ptr
有什么特殊之处吗?
是的,它是明确允许的。C++14(n4140)20.8.1/5:
...
unique_ptr
的模板参数T
可以是不完整类型。
对于 std::shared_ptr
和 std::weak_ptr
,使用类似的措辞也是允许的。
当然可以。这基本上是某种路径的实现。
std::unique_ptr可以用于不完整类型T的构造,例如 以便在Pimpl习惯用法中用作句柄。如果使用默认删除器,则必须在代码中的点上完成T, 在其中调用删除器,在std::unique_ptr的析构函数、移动赋值运算符和重置成员函数中发生。
因此,是的,std::unique_ptr
可以以这种方式使用。