标题:[求助]请分析一下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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-51585-1-1.html




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

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