繁体   English   中英

C ++:为什么weak_ptr没有shared_ptr &&构造函数?

[英]C++: why doesn't weak_ptr have a shared_ptr&& constructor?

C ++草案标准要求使用weak_ptr的以下构造函数:

weak_ptr(const weak_ptr& r) noexcept;
template<class Y> weak_ptr(const weak_ptr<Y>& r) noexcept;
template<class Y> weak_ptr(const shared_ptr<Y>& r) noexcept;

weak_ptr(weak_ptr&& r) noexcept;
template<class Y> weak_ptr(weak_ptr<Y>&& r) noexcept;

我很惊讶没有看到以下构造函数:

template<class Y> weak_ptr(shared_ptr<Y>&& r) noexcept;

当然,从const引用到shared_ptr的现有构造函数在rvalue引用版本可以使用的任何上下文中均可正常工作。 但是我相信,在调用者希望通过使用shared_ptr右值来初始化weak_ptr来将共享引用破坏性地转换为弱引用的情况下,后者可以节省至少两个原子操作。

weak_ptr<>持有指向由shared_ptr<>管理的对象的非所有者指针。 当删除该对象的最后一个shared_ptr<>引用时,该对象即被删除。

如果您错过的构造函数存在,则可能会发生以下情况:将最后一个现有的shared_ptr<>作为参数传递,这将在移动过程中破坏对象。 因此,您将剩下一个指向已删除对象的weak_ptr<>

没什么意义吧?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM