[英]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.