MTL*_*hil 5 c++ smart-pointers handle
我刚刚完成了Koenig&Moo的Accelerated C++,在第13章和第14章中,他们列出了一些Handle类的想法和实现(简单,共享,引用计数).
这些类包含一个原始指针,并从客户端代码中抽象出动态对象的分配/释放,以避免原始指针的所有危险,同时允许用户取消引用它们以访问指向的对象.基本上是一种与原始内存资源接口的"更安全"方式.
这些章节中介绍的类是否基本上是智能指针的实现?智能指针对我来说仍然是一个新手,但据我所知,这些Handle类正在执行相同的功能.
编辑
我应该补充一点,他们在这些章节中开发的类是模板类,因此它们不受特定资源的约束,例如,他们没有设计特定的FileHandle类.
这里的第一个代码片段7.1 中的代码几乎就是他们在我所指的章节中得到的代码.
根据您的描述,它听起来像一个智能指针.
虽然我个人不会使用术语句柄,因为它有点含糊不清(只需将智能指针称为智能指针).
问:你能从头开始写一个智能指针吗?
答:是的
问:你应该编写自己的智能指针吗?
答:没有.它比你想象的要复杂得多.甚至书中的描述也只是掩盖了更为复杂的问题.坚持信誉良好的图书馆提供的标准服务.
问:处理它的意思.
答:它曾经是指指针的指针.但随着该术语的重复使用,这个词多年来一直模糊不清.但是您可以将其视为指向资源的指针,其中资源可以通过其他方法访问,并且在此上下文中,它们的描述是有效的.
问:你应该使用智能指针而不是原始内存.
答:永远不要使用RAW内存,除非绝对必要(实际上从来没有)总是将其封装在管理它的类中.该类是智能指针还是其他类型的对象是一个很好的问题.std :: vector不被认为是智能指针,但它封装了一个RAW指针.
问:你是否应该从业务逻辑中抽象出内存管理:
答:这是一个棘手的问题,有些人可能不同意.但我会永远说.一堂课应该做一件事.事情是资源管理或业务逻辑.结合这两个导致太不可预见的复杂性.