gpt4 book ai didi

C++ 为什么 `observer_ptr` 有一个采用 `W*` 的构造函数?

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:41 24 4
gpt4 key购买 nike

据我了解,提议的 std::observer_ptrstd::unique_ptr 有关与std::weak_ptr相同与 std::shared_ptr 有关.

那么为什么 std::observer_ptr<W>接口(interface),根据建议N4282 , 允许从 W* 构建指针?

这意味着一个包含 W* 的实现作为成员,可能类似于 this answer 中给出的伪实现, 最简单地提出

template<typename T>
using observer_ptr = T*;

因此,这似乎排除了如下所示的有效性检查:

std::unique_ptr<W> u = std::make_unique<W>();
std::observer_ptr<W> o(uptr.get());
uptr.reset();

if(o)
{
//u is already nullptr, but o doesn't know
o->foo(); //invalid dereferentation
}

相反,我希望被允许执行以下操作:

std::unique_ptr<W> u = std::make_unique<W>();
std::observer_ptr<W> o(uptr);
uptr.reset();

if(o)
{
//execution doesn't get here, o is nullptr
}

这相当于用 std::weak_ptr 可以做的事情通过锁定它,这是 imo 的核心优势 observer_ptr可以提供一个非拥有的原始指针。

那么,为什么不强制执行呢?

最佳答案

As far I understood the proposed std::observer_ptr is related to std::unique_ptr in the same way as std::weak_ptr is related to std::shared_ptr.

这是一种误解。它与 unique_ptr 无关。它表示与指针对象的所有权无关。

关于C++ 为什么 `observer_ptr<W>` 有一个采用 `W*` 的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921753/

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