所以說,我有一個對象/指針/不管這樣的事情的定義是:把對象當作指針或對象來區別對待?
A* a = new A();
誰恰巧有方法
b();
c();
,我已經找到了做事的方式是這樣的:
a->b();
該方法工作得很好。 但是現在我看到有人做這種方式:
(*a).b();
的問題是:有什麼區別(即如何在每個管理地址和值)調用方法,並根據這的這兩種方式之間,哪個最適合使用?
如果這是其他問題的重複,請讓我知道,我會在看到原始問題後將其清除。
所以說,我有一個對象/指針/不管這樣的事情的定義是:把對象當作指針或對象來區別對待?
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*()
。 (另外:這種情況比較少見,它最常用於像指針那樣的對象:迭代器,智能點等等,如果它們設計得很好,那麼上面的兩個表格仍然是相同的。)
我想你的意思是在你的代碼中說'(* pointer_to_A).b();'。如我錯了請糾正我。 另外,我明白你的意思。所以這個交易與自我初始化的對象是不同的。 – Yokhen 2012-02-21 18:46:41
@Yokhen - 謝謝。我現在修復了這個問題。 – 2012-02-21 18:55:18
沒有區別只是更容易看到它在做什麼。加上其他語言以這種方式調用方法。 – qwertymk 2012-02-21 18:40:48