兩個C++對象是否相等,要程序員自己下定義,通常是覆蓋==操作符


我曾經好多年對Java的==和equals的區別和聯系搞不清楚,后來搞清楚了,筆記在這里:

http://www.cnblogs.com/findumars/p/3240761.html
http://www.cnblogs.com/findumars/p/3746878.html

刨去更細節的內容,其實只要明白一個原理即可:兩個對象在內存中是兩個不同的區域,就算其所有內容完全一模一樣,也仍然是兩個不同的對象。只是編程嘛,就是描述邏輯,有些情況下我們必須定義什么叫做兩個對象相等。這個就隨你啦,你可以定義兩個對象的首地址相等才叫對象相等(其實是不可能實現的),可以定義它們的HashCode相等就對象相等,或者僅僅是對象名字相等就算對象相等。這個思想在OO中是通用的,不僅僅為Java所獨有。比如今天在Qt的文檔中發現這段描述:

bool QVector::contains ( const T & value ) const

Returns true if the vector contains an occurrence of value; otherwise returns false.

This function requires the value type to have an implementation of operator==().

http://qt-project.org/doc/qt-4.8/qvector.html#contains

其實就是說QVector不懂你說的包含是指什么。所以你必須為T類型的數據單獨定義==操作符。我覺得吧,比較兩個對象相等夠麻煩,除非邏輯確實需要直接保存和處理對象,否則一般情況下只要比較兩個對象的指針(首地址)即可。那樣多省事呀。就像Delphi里的TList,簡直是RTL的核心管理類,許多RTL類都是靠它來實現的,但TList通常還不是僅僅用來保存指針而已(不過也剛巧,TObject.Create返回的全部都是堆上的指針,如果直接保存對象可能會麻煩一些)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM