gpt4 book ai didi

c++ - 如何实现 observer_ptr?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:08 25 4
gpt4 key购买 nike

我想在我的项目中使用 observer_ptr,但是 paper只定义了接口(interface),没有完整的实现。

有没有自己实现的简单方法?

最佳答案

您可以创建所谓的 observer_ptr简单地创建一个 unique_ptr使用 NOP 删除器。

template<typename T>
struct nop_deleter
{
void operator()(T*) const {}
};

template<typename T>
using observer_ptr = unique_ptr<T, nop_deleter>;

这仍然会有unique_ptr的行为,意味着它只能移动,而你想要 observer_ptr可复制。这使我们实现了更简单的实现:

template<typename T>
using observer_ptr = T*;

这会做你想做的一切。你可以称它为observer_ptr<int>而不是 int * ,因为后者当然是邪恶的。它是可复制的,并且在销毁时不执行任何操作。


我在上面的回答中开玩笑了,但希望它能证明 observer_ptr除了具有与原始指针类型不同的名称之外没有太多实用性。 使用非拥有原始指针没有错

你可能会争辩说 observer_ptr传达意图,但只有当您的代码库包含管理资源的原始指针实例时,该论点才有效。消除那些然后原始指针将自动意味着 observer_ptr ...没有花哨的名字。


如果您绝对必须有奇特的名称和/或不同的类型,那么自己实现它应该很容易。

关于c++ - 如何实现 observer_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24157735/

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