在《COM技术内幕》P168页介绍了智能指针,有如下代码
class CFoo{
  public:
     virtual void Bar();
};
class CFooPointer{
  private:
     CFoo *m_p;
  public:
     CFooPointer(CFoo *p){m_p=p;}
     CFoo * operator -> (return m_p;)
};
void Funky(CFoo *pFoo)
{
   CFooPointer spFoo(pFoo);
   spFoo->Bar();
}
请问在最后一句spFoo->Bar()是怎么回事?是写成(pFoo.operator->())Bar()还是(pFoo.operator->()).Bar(),后面有一个点。实在不明白怎么就调用Bar了。

解决方案 »

  1.   

    应该是(pFoo.operator->())->Bar()吧,也就是m_p->Bar().
    这个问题我也思考过,我想可能是->操作符与其它的操作符重载上有区别。
      

  2.   

    CFooPointer(CFoo *p){m_p=p;}    //C++的拷贝构造不用多说了吧
    CFoo * operator -> (return m_p;)//这里只是重载了->
                                    //目的是暴露CFoo的对象而已CFooPointer spFoo(pFoo);
    spFoo->Bar();  //这里实际是先通过operator -> 暴露出CFoo对象,最后m_p->Bar();  朋友: 欢迎你加入COM阵营,但有一点,你的跨度太大了~~~~
    许多C++的问题有时间要多补补问题:
    1.为什么要使用智能指针?
    2.使用智能指针什么时候可能会出问题,需要注意?
    学问题的时候,最好想一想~~~~~~~~~~~~蓦然回首,我靠,原来这么简单~~~~~~~~~
      

  3.   

    spFoo->Bar();  //这里实际是先通过operator -> 暴露出CFoo对象,最后m_p->Bar();
      

  4.   

    谢谢 loverx(烟花) 和各位弟兄。
    一直想学COM的,但水平太菜,C++也只是勉强,还请大牛们多多关照。