2012-02-21 70 views
1

所以說,我有一個對象/指針/不管這樣的事情的定義是:把對象當作指針或對象來區別對待?

A* a = new A(); 

誰恰巧有方法

b(); 
c(); 

,我已經找到了做事的方式是這樣的:

a->b(); 

該方法工作得很好。 但是現在我看到有人做這種方式:

(*a).b(); 

的問題是:有什麼區別(即如何在每個管理地址和值)調用方法,並根據這的這兩種方式之間,哪個最適合使用?

如果這是其他問題的重複,請讓我知道,我會在看到原始問題後將其清除。

+1

沒有區別只是更容易看到它在做什麼。加上其他語言以這種方式調用方法。 – qwertymk 2012-02-21 18:40:48

回答

6

沒有區別。它只是一個不同的符號。

0

沒有區別。首選->,因爲它更清潔,並說明你的意思更好。

但是,->*可能被重載。所以對於某些類別他們可能會做不同的事情,雖然這是非常不常見的,而且不可能用於指針。

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*()。 (另外:這種情況比較少見,它最常用於像指針那樣的對象:迭代器,智能點等等,如果它們設計得很好,那麼上面的兩個表格仍然是相同的。)

+0

我想你的意思是在你的代碼中說'(* pointer_to_A).b();'。如我錯了請糾正我。 另外,我明白你的意思。所以這個交易與自我初始化的對象是不同的。 – Yokhen 2012-02-21 18:46:41

+0

@Yokhen - 謝謝。我現在修復了這個問題。 – 2012-02-21 18:55:18