C++ 是什么阻止STL拥有一个;std::deep_ptr";?

C++ 是什么阻止STL拥有一个;std::deep_ptr";?,c++,c++11,smart-pointers,C++,C++11,Smart Pointers,最近,我遇到了一种情况,需要复制一个具有std::unique\u ptr类型成员的对象 class A { /* ... */ std::unique_ptr<A> next_; }; A a0; A a1{a0}; // compiler error, due to the std::unique_ptr is un-copyable // but I do need a deep copy! A类{ /* ... */ std::unique\u ptr next\uu;

最近,我遇到了一种情况,需要复制一个具有
std::unique\u ptr
类型成员的对象

class A {
/* ... */
std::unique_ptr<A> next_;
};
A a0;
A a1{a0}; 
// compiler error, due to the std::unique_ptr is un-copyable
// but I do need a deep copy!
A类{
/* ... */
std::unique\u ptr next\uu;
};
a0;
A a1{a0};
//编译器错误,原因是std::unique\u ptr不可复制
//但我确实需要一份深度拷贝!
当然,我可以在
a
中有一个
Clone
功能让我通过,但是为什么STL不能有一个
deep\u ptr
来让我的生活更轻松(将
next\uu
更改为
std::deep\u ptr next\u


我想,深度复制是日常开发生活中一个非常普遍的需求,那么为什么STL缺少这样的东西
std::deep_ptr
?这一概念是否毫无意义,尤其是在某些高级语言级别(例如,STL的级别)上?

我认为这是一个基于观点的问题。如果你愿意,你可以向C++委员会提交一个建议。你可以把UnQuyGPTR包装成一个很容易添加深层拷贝的东西,所以我想它还没有被认为值得去尝试它的标准。我想它没有被纳入标准的一个原因是它正在模拟两个不兼容的东西(一个指针和它指向的值)。这会影响一些事情,比如常量值的含义应该是什么。是的,我可以,但只有在通过问一些问题“深入”了解这一点之后。也许有很多人和我有同样的怀疑,并且对此做了大量的研究@Clonk@super除非您不能将
std::optional
作为
a