C++操作符重载有关问题
C++操作符重载问题
各位好:
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后面跟了一个*号呢?
和后面的成员指针变量有关系,或者说指针的操作符重载就是这种固定的格式?
有哪个高手能帮忙解答么?谢谢。分不多,尽量给。
------解决方案--------------------
各位好:
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后面跟了一个*号呢?
和后面的成员指针变量有关系,或者说指针的操作符重载就是这种固定的格式?
有哪个高手能帮忙解答么?谢谢。分不多,尽量给。
------解决方案--------------------
- C/C++ code
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 ;} //返回的是指针
------解决方案--------------------
1. 解引用,返回智能指针对象的引用,如果不加& 变成返回值了,不拷贝构造,不会获取原对象
2. 取地址,指针的地址当然是二级指针了
3. 比方说可以这样用 Class Test t(pI);
t->func();
直接调用指针函数