[問題] 重載-> ?

看板C_and_CPP (C/C++)作者 (幸福!)時間16年前 (2010/06/14 08:47), 編輯推噓4(4013)
留言17則, 5人參與, 最新討論串1/2 (看更多)
想問一下,如果重載->的話,那是要怎麼用啊? 我看一個原碼是寫 std::auto_ptr<T> m_pImpl; T* operator->() { return m_pImpl.get() ; } const T* operator->() const { return m_pImpl.get(); } 但是不知道啥時才會進入->裡面... 謝謝~ --

07/28 14:36,
why~
07/28 14:36

07/28 14:36,
so~
07/28 14:36

07/28 14:37,
se~
07/28 14:37

07/28 14:39,
ri~
07/28 14:39

07/28 14:41,
阿~嘶~
07/28 14:41
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.24.214

06/14 09:13, , 1F
-> 的 overloading 行為跟其它 operator 不太一樣,實質上
06/14 09:13, 1F

06/14 09:13, , 2F
比較像是展開。
06/14 09:13, 2F

06/14 09:38, , 3F
所以使用的時候就像XXX->xxx() xxx會是auto_ptr<T>的函數
06/14 09:38, 3F

06/14 09:38, , 4F
?
06/14 09:38, 4F

06/14 09:43, , 5F
寫 m_pImpl-> 等於是寫 ( m_pImpl.get() )->
06/14 09:43, 5F

06/14 09:44, , 6F
我也想知道->的重載要怎麼用
06/14 09:44, 6F

06/14 10:32, , 7F
對,是 -> 的左邊會先變成 operator-> 的 return value,
06/14 10:32, 7F

06/14 10:32, , 8F
然後再做一次 ->。這個效果會連鎖,如果 operator-> 傳回
06/14 10:32, 8F

06/14 10:32, , 9F
的物件又有 overload operator->,就會再來一次。
06/14 10:32, 9F

06/14 10:33, , 10F
C++ 有一些特殊技巧也是靠這種連鎖展開達成的。
06/14 10:33, 10F

06/14 12:17, , 11F
喔喔...I see..不過有哪些東西會運用到啊?
06/14 12:17, 11F

06/14 15:36, , 12F
operator->裡面除了return,不能做其他事?
06/14 15:36, 12F

06/14 16:51, , 13F

06/14 16:53, , 14F
(*a)->bbb(); 這行如果把*號拿掉,結果就不是自己要的
06/14 16:53, 14F

06/14 16:56, , 15F
可是原文的m_pImpl不也是指標嗎?可以不用加*號?
06/14 16:56, 15F

06/14 20:26, , 16F
這個...我也不太曉得.囧..還在融會貫通ing
06/14 20:26, 16F

06/16 22:57, , 17F
原文的m_pImpl並不是指標。std::auto_ptr確實是物件
06/16 22:57, 17F
文章代碼(AID): #1C5NmaHM (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
4
10
完整討論串 (本文為第 1 之 2 篇):
4
10
4
17
文章代碼(AID): #1C5NmaHM (C_and_CPP)