百度百科词条对智能指针的解释把我搞糊涂了

风之子赛拉飞尔 2010-11-23 11:28:08
词条链接:http://baike.baidu.com/view/1391603.htm

智能指针的核心不是->运算符的重载么,什么时候跟引用计数扯上关系了??
...全文
101 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
另,引用计数技术概念属于软件设计层面而不属于语言技术层面,而智能指针属于语言技术层面。
  • 打赏
  • 举报
回复
好吧,不如这样说吧,“智能指针”这个概念,我们分为狭义的和广义的。
狭义的,就是重载了->运算符的类或模板类,因为这个运算符确实比较超越(穿越),我个人习惯称之为C++语法的后门:)

广义的,就是在狭义的基础上,提供了引用计数等扩展特性的智能指针类或模板类。
chehw 2010-11-24
  • 打赏
  • 举报
回复
百度百科充分体现了我国长期以来一贯遵循的模式——灌输+误导。

以智能指针为例,

百度百科的定义:“智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。
实现引用计数有两种经典策略:一是引入辅助类,二是使用句柄类。下面分别介绍这些内容。

http://baike.baidu.com/view/1391603.htm

wikipedia的定义:“In computer science, a smart pointer is an abstract data type that simulates a pointer while providing additional features, such as automatic garbage collection or bounds checking. These additional features are intended to reduce bugs caused by the misuse of pointers while retaining efficiency. Smart pointers typically keep track of the objects they point to for the purpose of memory management.
Several types of smart pointers exist. Some work with reference counting, others by assigning ownership of the object to a single pointer.
In C++, smart pointers may be implemented as a template class that mimics, by means of operator overloading, the behaviour of traditional (raw) pointers, (e.g.: dereferencing, assignment) while providing additional memory management algorithms.

(http://en.wikipedia.org/wiki/Smart_pointer)


注意红字的部分,百度百科的所提到的“通用”和“经典”不知是那个砖家或叫兽给我们下的定论。

  • 打赏
  • 举报
回复
《COM+编程指南》(美)Mark Michaelis著
2002年1月第1版 机械工业出版社
ISBN 7-111-09536-7

书中确实有这样一句话:“智能指针自动执行引用计数”(Page 114,§5.5),
但这只是说明COM中智能指针的作用,并不是对智能指针的一个严格定义。

《C++设计新思维》(美)Andrei Alexandrescu著
(台)侯捷/於春景译 2003年3月第1版 华中科技大学出版社
ISBN 7-5609-2906-0

书中对智能指针的描述是这样的(Page 157~158,§7.1):
“什么是smart pointers?它是一个C++ class,在语法和某些语义上模拟一般指针,
但提供更多功能。”
……
“smart pointers的好处是,你可以用smart pointers来取代指针,代码无需进行
大修改。这样,你就可以轻而易举地得到额外好处。”
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vc_zsy 的回复:]
智能指针就是对一个指针做了一个封装,里面有对该指针的引用计数,并且重载了->,通过智能指针调用就等同于指针本身调用,当引用计数为0的时候就delete该对象。
[/Quote]

智能指针类所关联的指针一定是堆指针么:)

即使是“智能指针模板”,引用计数问题也应该由组件对象模型体系本身来处理,
而不应由智能指针模板类来处理。比如COM中的IUnknown接口提供了AddRef()
和Release()方法。
VC_ZSY 2010-11-24
  • 打赏
  • 举报
回复
智能指针就是对一个指针做了一个封装,里面有对该指针的引用计数,并且重载了->,通过智能指针调用就等同于指针本身调用,当引用计数为0的时候就delete该对象。
  • 打赏
  • 举报
回复
记得最初是在一本介绍COM的书中看到的,等下班回家找下
  • 打赏
  • 举报
回复
额的神~是不是应该先区分一下概念,
智能指针
还是
组件对象模型体系中的 智能指针模板
Eleven 2010-11-23
  • 打赏
  • 举报
回复
lz哪里看到的智能指针的核心和->运算符的重载相关的?
skyfree 2010-11-23
  • 打赏
  • 举报
回复
看来你对智能指针的概念并不清楚
skyfree 2010-11-23
  • 打赏
  • 举报
回复
当然跟引用计数有关系了!
reggiekiller 2010-11-23
  • 打赏
  • 举报
回复
其实我今天才知道神马是智能指针
muzizongheng 2010-11-23
  • 打赏
  • 举报
回复
如果你怀疑百科那就用wiki吧, 这个还是权威的。 呵呵。

当然针对你说的现在这个问题, 是和引用计数有关的。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧