找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 359|回复: 5

[求助]请分析一下String类中的赋值函数。

[复制链接]
发表于 2009-11-2 04:16:44 | 显示全部楼层 |阅读模式 IP:江苏扬州
请版主帮忙分析一下String类中的赋值函数,问题如图中红批所示。。ths!!:)
附件: 只有本站会员才能下载或查看附件,请您 登录 或 注册
发表于 2009-11-2 04:16:47 | 显示全部楼层 IP:江苏扬州
我觉得,既然是构造函数,那么说明之前没有这个对象,m_data还没分配空间,就不用delete了吧?
如果写上运行没错,但是没有必要吧。
回复

使用道具 举报

发表于 2009-11-2 04:16:50 | 显示全部楼层 IP:江苏扬州
这是<<高质量C++C编程指南>>林锐编著中的代码,《C++ Primer 4rd Edition》中亦是这样写的,我想是不是可以这样分析,请柳儿指正:)
在驱动程序中,当:
String str("asadsads");
String str1;
str1 = str; //此时调用赋值函数,但str1已经申请了空间,但这个空间是否能装得下str却不可知,于是不如先把str1释放掉,然后再申请与str相同的存储空间
回复

使用道具 举报

发表于 2009-11-2 04:16:55 | 显示全部楼层 IP:江苏扬州
很简单的问题嘛!因为拷贝构造函数原始就是空的,是一个从无值到有值的过程!
回复

使用道具 举报

发表于 2009-11-2 04:17:01 | 显示全部楼层 IP:江苏扬州
当然要删除了,请看


  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. int main()
  5. {
  6. string str1 = "string 1";
  7. string str2 = "string 2 string 2";
  8. str1 = str2;
  9. cout<<str1<<endl;

  10. return 0;
  11. }
复制代码


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

使用道具 举报

发表于 2009-11-2 04:17:06 | 显示全部楼层 IP:江苏扬州
说得非常有道理,感谢各位的指点。。。:)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 01:43 , Processed in 0.181662 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表