C++操作符重载问题

umbrook 2008-09-02 10:10:31
各位好:
T& operator*() { assert(m_pI != NULL) ; return *m_pI ;}
T** operator&() { assert(m_pI == NULL) ; return &m_pI ;}
T* operator->() { assert(m_pI != NULL) ; return m_pI ;}
我知道这3句话是模板的操作符重载,
那为什么第一句话的T后面跟了一个&号呢?
第二句话的T后面跟了两个*号呢?
第三局话的T后面跟了一个*号呢?

和后面的成员指针变量有关系,或者说指针的操作符重载就是这种固定的格式?
有哪个高手能帮忙解答么?谢谢。分不多,尽量给。
...全文
209 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟来了2022 2012-06-11
  • 打赏
  • 举报
回复
学习了。
umbrook 2008-09-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 two_ears 的回复:]
这问题提的,多看书,最好自己看明白
T& operator*() { assert(m_pI != NULL) ; return *m_pI ;}
重载解引用操作符,因为需要允许被赋值,所以返回一个左值,要返回引用
T** operator&() { assert(m_pI == NULL) ; return &m_pI ;}
重载了取地址操作符,它得到的是一个指针变量的地址,所以是二级指针
T* operator->() { assert(m_pI != NULL) ; return m_pI ;}
这个是重载了指针的类成员访问操作符,返回一个作为-…
[/Quote]

哪本书 ?高手有介绍么?
e_sharp 2008-09-02
  • 打赏
  • 举报
回复
智能指针的实现
two_ears 2008-09-02
  • 打赏
  • 举报
回复
哦,打开就干别的去了,回来回了贴,发现都这么多回帖了,呵呵
two_ears 2008-09-02
  • 打赏
  • 举报
回复
这问题提的,多看书,最好自己看明白
T& operator*() { assert(m_pI != NULL) ; return *m_pI ;}
重载解引用操作符,因为需要允许被赋值,所以返回一个左值,要返回引用
T** operator&() { assert(m_pI == NULL) ; return &m_pI ;}
重载了取地址操作符,它得到的是一个指针变量的地址,所以是二级指针
T* operator->() { assert(m_pI != NULL) ; return m_pI ;}
这个是重载了指针的类成员访问操作符,返回一个作为->左值的指针

这里面有些是常规的要求
yyyapple 2008-09-02
  • 打赏
  • 举报
回复
其实是透过包装类去操作真正的指针
yyyapple 2008-09-02
  • 打赏
  • 举报
回复
1. 解引用,返回智能指针对象的引用,如果不加& 变成返回值了,不拷贝构造,不会获取原对象
2. 取地址,指针的地址当然是二级指针了
3. 比方说可以这样用 Class Test t(pI);
t->func();
直接调用指针函数
chenzhp 2008-09-02
  • 打赏
  • 举报
回复
T& operator*()  { assert(m_pI != NULL) ; return *m_pI ;} 
//获取一个指针的内容。返回的是一个T对*m_pI 的引用,所以要加一个&
T** operator&() { assert(m_pI == NULL) ; return &m_pI ;}
//m_pI 是一个指针,而要返回的是&m_PI,就是该指针的本身,所以要用二级指针接受
T* operator->() { assert(m_pI != NULL) ; return m_pI ;}
//返回的是指针
冷月清晖 2008-09-02
  • 打赏
  • 举报
回复
T& operator*() { assert(m_pI != NULL) ; return *m_pI ;} //返回的是指针指向的值
T** operator&() { assert(m_pI == NULL) ; return &m_pI ;} //返回的是指针的地址
T* operator->() { assert(m_pI != NULL) ; return m_pI ;} //返回的是指针的值
yyyapple 2008-09-02
  • 打赏
  • 举报
回复
智能指针中的

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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