将对象视为指针或指针之间的区别

Difference between treating the object as such or as pointer?

本文关键字:指针 之间 区别 对象      更新时间:2023-10-16

假设我有一个对象/指针/不管这种东西的定义是什么:

A* a = new A();

谁碰巧有方法

b();
c();

我发现的做事方式是:

a->b();

这种方法效果很好。然而,现在我看到人们这样做:

(*a).b();

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

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

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

对于指针,没有区别:

如果您申报:

A* pointer_to_A = new A();

那么这两者在定义上是等价的:

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

然而,如果您在对象上声明:

A a;

那么这两者并不一定等同:

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

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

没有区别。更喜欢->,因为它更干净,能更好地说明你的意思。

但是,->*可能过载。因此,对于某些类,它们可能会做不同的事情,尽管这是非常非常罕见的,对于指针来说也是不可能的。

->表示法是语法糖。