• 5770阅读
  • 7回复

QT字符串问题(之前问错了,问题已经更改) [复制链接]

上一主题 下一主题
离线destiny
 
只看楼主 倒序阅读 楼主  发表于: 2010-01-22
在VS2005中集成QT的环境

sorry 说错了,是向量push_back,QString的问题
child.toElement().attribute("current_height")这个是获得xml文件中的一个字符串
v_string.push_back(child.toElement().attribute("current_height"))这个编译通过,运行有堆错误
下面则可以运行正常。
v_string.push_back(*(new QString(child.toElement().attribute("current_height"))));

而且最奇怪的是xml我是单独在命令行里面调试编写的,当时即使用v_string.push_back(child.toElement().attribute("current_height"))也没有问题
该方法移植奥另一个程序就出现上述问题。
[ 此帖被destiny在2010-01-22 18:34重新编辑 ]
离线benbenmajia

只看该作者 1楼 发表于: 2010-01-22
QString用的是隐式转换,你这样做的时候str2的指针也是指向str1的堆的
安然.....
离线benbenmajia

只看该作者 2楼 发表于: 2010-01-22
QString类进行了多方面的优化,包括使用隐式共享(implicit sharing)和高效的内存分配策略.执行一个深度拷贝代价是昂贵的,要占有更多的内存和cpu资源,而浅度拷贝的效率则很好,它仅仅只需要设置一个指向共享数据块的指针以及修改引用计数的值.QString采用隐式共享技术,将深度拷贝和浅度拷贝结合起来.隐式共享又叫回写复制,当两个对象共享一份数据时(通过浅度拷贝实现数据块共享),如果数据不改变,不进行数据复制,而当某个对象需要改变数据时,则执行深度拷贝.隐式共享的好处是显而易见的,它可以降低对内存和cpu资源的使用,提高程序的运行效率,它使得在函数中(比如参数,返回值)使用值传递更有效率.


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wenzhezujie/archive/2009/11/26/4877611.aspx
安然.....
离线benbenmajia

只看该作者 3楼 发表于: 2010-01-22
你的str1分配内存了吗?
安然.....
离线yangfanxing
只看该作者 4楼 发表于: 2010-01-22
你说反了吧???
QString str2 = str1;

QString str2 = QString(str1);
是对的;

QString str2 = new QString(str1);这个粉是错误~~~
PHPWind好恶心。。。不想看这种界面。。。
离线benbenmajia

只看该作者 5楼 发表于: 2010-01-22
你是不是在后面对这些操作过什么?
安然.....
离线benbenmajia

只看该作者 6楼 发表于: 2010-01-22
笔下误,程序上这么写编译不会过的
安然.....
离线destiny
只看该作者 7楼 发表于: 2010-01-22
引用第3楼benbenmajia于2010-01-22 17:29发表的  :
你的str1分配内存了吗?


多谢您的解答,我之前的问题貌似问错了。
但是非常感谢您,学习了QString的知识,这个我之前还真不知道呢。
快速回复
限100 字节
 
上一个 下一个