在《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了。
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了。
这个问题我也思考过,我想可能是->操作符与其它的操作符重载上有区别。
CFoo * operator -> (return m_p;)//这里只是重载了->
//目的是暴露CFoo的对象而已CFooPointer spFoo(pFoo);
spFoo->Bar(); //这里实际是先通过operator -> 暴露出CFoo对象,最后m_p->Bar(); 朋友: 欢迎你加入COM阵营,但有一点,你的跨度太大了~~~~
许多C++的问题有时间要多补补问题:
1.为什么要使用智能指针?
2.使用智能指针什么时候可能会出问题,需要注意?
学问题的时候,最好想一想~~~~~~~~~~~~蓦然回首,我靠,原来这么简单~~~~~~~~~
一直想学COM的,但水平太菜,C++也只是勉强,还请大牛们多多关照。