| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 941 人关注过本帖
标题:[求助]请分析一下String类中的赋值函数。
只看楼主 加入收藏
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
 问题点数:0 回复次数:5 
[求助]请分析一下String类中的赋值函数。
请版主帮忙分析一下String类中的赋值函数,问题如图中红批所示。。ths!!:)
图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: 赋值 String 函数 
2006-03-20 14:24
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
我觉得,既然是构造函数,那么说明之前没有这个对象,m_data还没分配空间,就不用delete了吧?
如果写上运行没错,但是没有必要吧。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-03-20 15:14
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
这是<<高质量C++C编程指南>>林锐编著中的代码,《C++ Primer 4rd Edition》中亦是这样写的,我想是不是可以这样分析,请柳儿指正:)
在驱动程序中,当:
String str("asadsads");
String str1;
str1 = str; //此时调用赋值函数,但str1已经申请了空间,但这个空间是否能装得下str却不可知,于是不如先把str1释放掉,然后再申请与str相同的存储空间

谷底深深行 ,峰顶漫漫步......@_@
2006-03-20 15:53
我爱璐璐
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-3-11
收藏
得分:0 

很简单的问题嘛!因为拷贝构造函数原始就是空的,是一个从无值到有值的过程!


2006-03-20 21:55
西部天狼
Rank: 1
等 级:新手上路
帖 子:95
专家分:0
注 册:2006-2-23
收藏
得分:0 


当然要删除了,请看

[CODE]
#include <iostream>
#include <string>
using namespace std;

int main()
{
string str1 = "string 1";
string str2 = "string 2 string 2";

str1 = str2;

cout<<str1<<endl;

return 0;
}
[/CODE]

str1原来有值,即m_data不为空,并且大小为strlen[m_data]。
str2的内容要多于str1,即其m_data的长度要大于str1的m_data的长度。
因此如果要将str2赋值给str1时,就必须扩展str1的m_data数组的大小,以适应str2。
合理的办法是将原有的数组清除,并重新创建大小与str2相同的数组,这样即高效又安全。挺好。
至于,拷贝构造函数为什么没有删除,正如4楼所说的。


学习-->编程-->交流-->再学习-->再编程-->再交流
2006-03-20 23:27
olivezhang
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-9-14
收藏
得分:0 
说得非常有道理,感谢各位的指点。。。:)

谷底深深行 ,峰顶漫漫步......@_@
2006-03-21 13:03
快速回复:[求助]请分析一下String类中的赋值函数。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029245 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved