簡而言之:
如何定義運算符=我的課,使得它編譯只有當RHS爲0(OBJ = 0)
但給如果rhs非0值,則編譯錯誤。
我知道這是可能的,忘記了如何。我想要爲這個類的對象(這意味着重置對象)允許賦值obj = 0,但是沒有定義其他整數或指針的賦值。除了obj = 0以外,沒有定義整數或指針的轉換。定義賦值操作符=只允許零RHS,否則將無法編譯
C obj;
obj = 0; // reset object
的operator=
裏面,我可以做assert(rhs == 0)
,但是這還不夠好。
我知道有可能 來定義operator=
這樣
它給編譯錯誤,如果rhs不是0.忘記詳細信息。
有人可以補充嗎?
感謝
爲什麼會有人想這麼做?如果它重置對象,請編寫一個名爲'reset'的方法。或者,您是否打算混淆嘗試閱讀您的代碼的人? – Axel
@Axel:'= 0'操作對於智能指針很常見。對於類似於某種類型ID的類。通過與常規指針類比,在wihch = 0上是「重置過載」。所以對於ID類和SmartPointer類,這是我所說的很好的實踐。 OTOH,你是否有150個類,每個都有「重置」方法,當你需要跟蹤在特定的p-> reset()調用中調用reset()時,它是如何優於= 0的?沒有看到太多的差異。 – Andrei