std::unique_ptr结构成员到结构类型的转换

5

Is

struct A
{
    std::unique_ptr<A> a;
};

标准允许这样做吗?我认为对于像std::set这样的容器类型不允许,但是unique_ptr有什么特殊之处吗?


这更像是同一类型的成员的示例。让它指向自身会引入循环引用。 - alexm
3个回答

4

是的,它是明确允许的。C++14(n4140)20.8.1/5:

... unique_ptr 的模板参数 T 可以是不完整类型。

对于 std::shared_ptrstd::weak_ptr,使用类似的措辞也是允许的。


0

当然可以。这基本上是某种路径的实现。


1
我不明白,抱歉。 - P45 Imminent

0
根据此reference

std::unique_ptr可以用于不完整类型T的构造,例如 以便在Pimpl习惯用法中用作句柄。如果使用默认删除器,则必须在代码中的点上完成T, 在其中调用删除器,在std::unique_ptr的析构函数、移动赋值运算符和重置成员函数中发生。

因此,是的,std::unique_ptr可以以这种方式使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接