gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:40:07 25 4
gpt4 key购买 nike

C++ 标准草案 mandates 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 的现有构造函数在右值引用版本可以工作的任何上下文中都可以正常工作。但我相信后者将允许在调用者希望通过使用 shared_ptr 右值初始化 weak_ptr< 破坏性地将共享引用转换为弱引用的情况下保存至少两个原子操作.

最佳答案

A weak_ptr<>持有指向由 shared_ptr<> 管理的对象的非拥有指针.当最后一个 shared_ptr<> 时对象被删除对它的引用被删除。

如果您错过的构造函数存在,您可能会传递最后一个存在的 shared_ptr<>作为参数,这将在移动过程中破坏对象。所以你会留下一个 weak_ptr<>指向一个已经删除的对象。

没有多大意义,对吧?

关于C++:为什么 weak_ptr 没有 shared_ptr&& 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44038565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com