• 5474阅读
  • 3回复

[提问]QList 改变元素成员值时,怎么地址还变了? [复制链接]

上一主题 下一主题
离线liujingjing5
 

只看楼主 倒序阅读 楼主  发表于: 2012-01-23


书上说QList 等号赋值时,是共用元素,第一个图可以证实,qlist1 和qlist2的0号元素地址都是一样的;
但是改变qlist1[0]的一个成员值时,居然qlist1和qlist2的0号元素地址就不一样了。。。
这是为何?
离线roywillow

只看该作者 1楼 发表于: 2012-01-23
Qt使用了隐式共享,所以说在qlist2=qlist1时,只要二者不修改,二者的数据只占用一份的数据
然后既然修改了,所以两个list就不能再占用同一份数据了
就像QString a="a"; QString b=a; a="X";这样执行完如果a和b再是同样的值就有些奇怪了吧……QString可以看做QChar的容器,而你的QList<ca>则是ca的容器,这样理解应该能行得通吧……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线liujingjing5

只看该作者 2楼 发表于: 2012-01-23
引用第1楼roywillow于2012-01-23 19:18发表的  :
Qt使用了隐式共享,所以说在qlist2=qlist1时,只要二者不修改,二者的数据只占用一份的数据
然后既然修改了,所以两个list就不能再占用同一份数据了
就像QString a="a"; QString b=a; a="X";这样执行完如果a和b再是同样的值就有些奇怪了吧……QString可以看做QChar的容器,而你的QList<ca>则是ca的容器,这样理解应该能行得通吧……

原来是这样啊。谢谢您
离线myseemylife

只看该作者 3楼 发表于: 2012-01-31
~~~~~manual有讲哦~~嘿嘿
蠢笨的愚钝~
快速回复
限100 字节
 
上一个 下一个