gpt4 book ai didi

c++ - 句柄和智能指针一样吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:08 24 4
gpt4 key购买 nike

我即将完成 Koenig & Moo 的 Accelerated C++,在第 13 章和第 14 章中,他们列出了几个 Handle 类(简单的、共享的、引用计数的)的想法和实现。

这些类封装了一个原始指针并将动态对象的分配/释放从客户端代码中抽象出来,以避免原始指针的所有危险,并允许用户取消引用它们以访问指向的对象。基本上是一种与原始内存资源交互的“更安全”方式。

这些章节中介绍的类本质上是智能指针的实现吗?智能指针对我来说仍然很陌生,但据我了解,这些 Handle 类执行相同的功能。

  1. 两者之间有区别还是只是同一事物的另一个名称?
  2. 假设它们在功能上是等同的,在实践中是否会从头开始编写这样的类,而不是使用已经制作好的智能指针解决方案?

编辑

我应该补充一点,他们在这些章节中开发的类是模板类,因此它们没有绑定(bind)到特定资源,例如,他们没有设计特定的 FileHandle 类。

第一个代码片段中的代码here , 7.1, 几乎就是我所指章节中的内容。

最佳答案

根据您的描述,这听起来像是一个智能指针。
尽管我个人不会使用术语句柄,因为它有点含糊(只需将智能指针称为智能指针)。

问:你能从头写一个智能指针吗?
答:是的

Q:要不要自己写一个智能指针?
A:不,它比你想象的要棘手得多。甚至书中的描述也只是掩盖了更复杂的问题。坚持使用信誉良好的图书馆提供的标准库。

问:Handles是什么意思。
A:以前是指指向指针的指针。但多年来,随着该术语的重复使用,该术语变得模棱两可。但您可以将其视为指向资源的指针,其他方法可以访问该资源,在这种情况下,它们的描述是有效的。

问:是否应该使用智能指针而不是原始内存?
答:除非绝对必要(实际上永远不会),否则永远不要使用 RAW 内存,始终将其封装在管理它的类中。该类是智能指针还是其他类型的对象是一个很好的问题。 std::vector 不被认为是智能指针,但它封装了一个 RAW 指针。

问:是否应该从业务逻辑中抽象出内存管理:
答:这是一个棘手的问题,有些人可能会不同意。但我会说总是。一个类应该做一件事。问题是资源管理或业务逻辑。将两者结合起来会导致无法预料的复杂性。

关于c++ - 句柄和智能指针一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3389546/

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