关于String类 C++实现的一个问题

bandaoyu 2018-11-02 09:36:07
其中重载+的实现是这样的

String String::operator+(const String &str) const//重载+
{
String newString;
newString.length = length + str.size();
newString.data = new char[newString.length + 1];
strcpy(newString.data, data);
strcat(newString.data, str.data);
return newString;
}

有网友提出了疑问:
这里会有内存泄露吧,String newString;会申请一个字节的内存空间,重新赋值后原来的1个字节空间没有释放!


他说的对吗? 如果对,重载+ 应该如何实现?
...全文
56 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2018-11-08
  • 打赏
  • 举报
回复
引用 6 楼 hdt 的回复:
[quote=引用 3 楼 u012293844 的回复:]
为什么重新定义一个newString? 直接用this不可以么?

string str1,str2;
...
str1+str2;//如果用this,这句话将直接改变str1,所以不行,必须返回一个值。
[/quote]所噶,原来如此
赵4老师 2018-11-07
  • 打赏
  • 举报
回复
《C++编程思想》
  • 打赏
  • 举报
回复
网友提出的疑问是有道理的。原来的data没有释放。
bandaoyu 2018-11-06
  • 打赏
  • 举报
回复
YIN NE ? MEI YOU YIN?
只此冒泡君 2018-11-02
  • 打赏
  • 举报
回复
为什么重新定义一个newString? 直接用this不可以么?
真相重于对错 2018-11-02
  • 打赏
  • 举报
回复
这样实现可以
析构函数里面释放。
另外还要实现拷贝构造函数和operator=
bandaoyu 2018-11-02
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
这样实现可以
析构函数里面释放。
另外还要实现拷贝构造函数和operator=
有正确和完整的例子吗,贴过来给我吧
bandaoyu 2018-11-02
  • 打赏
  • 举报
回复
引用 3 楼 上班這麼困呢 的回复:
为什么重新定义一个newString? 直接用this不可以么?
我擦,对耶!哈哈,谢谢提醒
真相重于对错 2018-11-02
  • 打赏
  • 举报
回复
引用 3 楼 u012293844 的回复:
为什么重新定义一个newString? 直接用this不可以么?

string str1,str2;
...
str1+str2;//如果用this,这句话将直接改变str1,所以不行,必须返回一个值。
A-De 2018-11-02
  • 打赏
  • 举报
回复
if(newString.data) delete []newString.data;
newString.data = new char[newString.length + 1];
A-De 2018-11-02
  • 打赏
  • 举报
回复
newString.data 这个在构函数里有申请内存吗?有的话,就会泄露

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧