游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1819|回复: 3

智能指针问题

[复制链接]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2008-8-6 14:41:00 | 显示全部楼层 |阅读模式
智能指针一定要重载重载-> 或* 操作符,我看到一个这样的实现,但是不是很理解。如下:
inline T& operator*() const { assert(ptr); return *ptr; }
inline T* operator->() const { assert(ptr); return ptr; }
上面ptr是真正的指针,假设我这样使用
smart_ptr<person> jack(new person);//person是一个类
jack->getname();//这个调用其实是我想得到人的名字。
我不理解的地方是这句jack->getname();按照我对重载的理解,jack->被重载后应该返回ptr,所以上面那句等同与ptrgetname();但是这样的组合没有任何意义啊,谁能告诉我究竟是我哪里理解错了,或者是编译器会对这样的组合做特殊处理还是这么样?

jack->getname()调用的目的应该是让他调用ptr->getname();但是上面的实现方式我实在搞不懂,一直都没理解,后来也没管就这这样用了,今天突然又碰到,所以想问个究竟。

5

主题

115

帖子

115

积分

注册会员

Rank: 2

积分
115
发表于 2008-8-6 21:48:00 | 显示全部楼层

Re:智能指针问题

"jack->被重载后应该返回ptr,所以上面那句等同与ptrgetname()"昏倒,你这样认为就错了!
总之指针就用->,编译器内部处理其他的问题。

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2008-8-7 13:52:00 | 显示全部楼层

Re:智能指针问题

呵呵,我是从平常替换的角度考虑的,我想编译器也会做处理的,只是不知道编译器是怎么个处理的

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2008-8-7 22:59:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 17:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表