gpt4 book ai didi

c++ - 句柄与智能指针。用什么?

转载 作者:行者123 更新时间:2023-11-28 01:04:58 26 4
gpt4 key购买 nike

我开始开发一个图形引擎只是为了练习。出现的第一个问题是使用句柄或智能指针来引用我的类实例。

从我的角度来看:

  • 智能指针优点:按需创建,不存在成为过时指针的问题;缺点:由于它们在链表中,因此搜索指针是一个 O(n) 操作。

  • 处理优点:搜索是 O(1),对象重定位是 O(1);缺点:可以成为陈旧的指针,创建一个新句柄会强制系统检查句柄表中的第一个 NULL 条目。

选择哪一个?请解释您的选择。

编辑:

在您发表评论和回答后,我想澄清一些要点。

我并不是说智能指针是“由STL链表表示”方式的链表。我的意思是它们在某种程度上表现为链表(如果将一个对象从一个内存块移动到另一个内存块,则需要迭代智能指针的完整列表以正确更新对该对象的所有引用 - 它可以通过链表-).

而且我的意思并不是说句柄与不透明指针或指向实现模型的指针完全相同。我的意思是有一个全局句柄表(指针数组),所以当我请求一个对象时,我得到一个可取消引用的实例,其中包含该表中的索引,可以在其中找到指向该对象的实际指针。因此,如果我将对象从一个 block 移动到另一个 block ,只需更新句柄表中的指针条目,我就会同时自动更新所有指针。

最佳答案

这些定义都不符合通常使用的定义。智能指针根本不在链表中。通常你使用观察者模式来保留一个指向对象的原始指针 vector ,如果你需要迭代它们或其他东西,这些对象仍然存在。您描述的句柄几乎仅用于二进制兼容性原因,从不在进程中。

使用智能指针,它们会照顾好自己。

关于c++ - 句柄与智能指针。用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6724385/

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