指针 - > Call()和(*指针)之间的区别.Call()

时间:2012-11-19 13:48:09

标签: c++ function pointers call dereference

  

可能重复:
  ptr->hello(); /* VERSUS */ (*ptr).hello();

我正在学习C ++,我的问题是如果使用箭头操作符(->)或取消引用指针*来调用函数之间有任何区别。

这两个案例说明了我的问题。

Class* pointer = new Class();
(*pointer).Function();         // case one
pointer->Function();           // case two

有什么区别?

2 个答案:

答案 0 :(得分:6)

如果运算符*->没有重载,则两个版本都会完成相同的操作。

答案 1 :(得分:2)

鉴于

Class* pointer = new Class();

然后

(*pointer).Function();         // case one

取消引用指针,并在引用的对象上调用成员函数Function。它不使用任何重载运算符。操作符不能在原始指针或内置类型参数上重载。

pointer->Function();           // case two

这与第一个相同,使用内置->,因为pointer原始指针,但此语法更适合更长的链解除引用。

考虑例如。

(*(*(*p).pSomething).pSomethingElse).foo()

p->pSomething->pSomethingElse->foo()

->符号也一目了然。