• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

两个C++对象是否相等,要程序员自己下定义,通常是覆盖==操作符 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我曾经好多年对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返回的全部都是堆上的指针,如果直接保存对象可能会麻烦一些)。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#conn.open()外部表不是预期的格式(读取EXCEL文件出错)发布时间:2022-07-13
下一篇:
C++结构体指针发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap