处理对象或指针之间的区别?

时间:2012-02-21 18:38:58

标签: c++ object pointers

所以说我有一个对象/指针/无论这个东西的定义是什么:

A* a = new A();

碰巧有方法

b();
c();

我发现的做事方式是:

a->b();

并且该方法非常有效。 但是现在我看到人们这样做了:

(*a).b();

问题是:这两种调用方法的方法之间有什么区别(即每个方法管理的地址和值如何),根据这种方式,最好使用哪种方式?

如果这是其他问题的重复,请告诉我,我会在看到原始问题后将其删除。

4 个答案:

答案 0 :(得分:6)

没有区别。它只是一个不同的符号。

答案 1 :(得分:2)

对于指针,没有区别:

如果您声明:

A* pointer_to_A = new A();

然后根据定义这两个是等价的:

pointer_to_A->b();
(*pointer_to_A).b();

但是,如果你在对象上声明:

A a;

然后这两个不一定相同:

a->b();
(*a).b();

在这种情况下,第一行调用A::operator->(),而第二行调用A::operator*()。 (旁白:这种情况有点罕见。它最常用于行为类似于指针的对象:迭代器,智能点等。如果它们设计得很好,那么上面的两种形式仍然是相同的。)

答案 2 :(得分:0)

没有区别。更喜欢->因为它更清洁,并说明你的意思更好。

但是,->*可能会重载。所以对于某些类,他们可能做不同的事情,虽然这是非常罕见的,而且指针也是不可能的。

答案 3 :(得分:0)

->表示法是语法糖。