std::unique_ptr结构成员转换为结构类型

std::unique_ptr structure member to the structure type

本文关键字:结构 转换 类型 成员 ptr unique std      更新时间:2023-10-16

是否

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

标准允许吗?我不认为它适用于像std::set这样的容器类型,但unique_ptr有什么特别之处吗?

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

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

std::shared_ptrstd::weak_ptr也允许使用类似的措辞。

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

根据参考

std::unique_ptr可以为不完全类型T构造,例如以便于在Pimpl习语中用作句柄。如果默认如果使用deleter,则T必须在代码中deleter被调用,这发生在析构函数的move赋值中运算符,并重置std::unique_ptr的成员函数。

所以是的,std::unique_ptr可以这样使用。