免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1349 | 回复: 3
打印 上一主题 下一主题

C++一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-25 14:56 |只看该作者 |倒序浏览
  1. class String
  2. {
  3. public:
  4. String(const char *s){
  5.   if(s){
  6.    data=new char[strlen(s)+1];
  7.    strcpy(data,s);
  8.    data[strlen(s)]='\0';
  9.   }
  10.   else{
  11.    data=new char[1];
  12.    data[0]='\0';
  13.   }
  14. }
  15. ~String(){
  16.   data[0]='\0';
  17.   cout<<"delte data\n";
  18.   delete[] data;
  19. }
  20. char *getStr(){
  21.   return data;
  22. }
  23. private :
  24. char *data;
  25. };
  26. void print(String s){
  27. cout<<s.getStr()<<endl;
  28. }
  29. int _tmain(int argc, _TCHAR* argv[])
  30. {
  31. String B("Two");
  32. print(B);

  33. return 0;
  34. }
复制代码


print(B)有什么问题? 没有搞明白这个问题,应该是哪里释放掉B了,按值传递B有问题?

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
2 [报告]
发表于 2008-10-25 15:47 |只看该作者
void print(String& s);
你没有拷贝构造函数,String s作参数,无法取得原来的字串。

论坛徽章:
0
3 [报告]
发表于 2008-10-25 16:39 |只看该作者
不是有default copy constructor?
如果void print(String s) 修改为void print(String &s)就可以么?

论坛徽章:
0
4 [报告]
发表于 2008-10-25 17:50 |只看该作者
原帖由 yang5856 于 2008-10-25 16:39 发表
不是有default copy constructor?
如果void print(String s) 修改为void print(String &s)就可以么?

默认复制构造函数只是进行值复制,这样的话,会产生重复析构。传引用就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP