[英]Why does std::weak_ptr not have a move constructor or move assignment operator?
通过boost的weak_ptr的1.53标题,我惊讶地看到移动赋值和移动构造函数已经实现,即使它们没有记录。 从本文档中 ,没有任何要求std :: weak_ptr提供移动功能。
通过Visual Studio 2012的weak_ptr实现,我没有注意到在weak_ptr中声明了任何明显的移动操作,尽管它们可能隐藏在继承之后。 但是,此代码导致监视窗口报告指针的一个共享引用和两个弱引用,这使我相信weak_ptr未启用移动:
std::shared_ptr<int> ptr(std::make_shared<int>(5));
std::weak_ptr<int> weakptr(ptr);
std::weak_ptr<int> movedWeakPtr(std::move(weakptr));
是否有充分的理由说std :: weak_ptr不提供移动功能? 如果没有,weak_ptr应该被视为可移动类型吗?
根据定义 ,每个可复制的类型都是可移动的。 weak_ptr
是可复制的,因此它是可移动的。
weak_ptr
可以有一个移动构造函数。 但它只适用于相对较小的优化。 这可能是标准委员会的疏忽。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.