作者aquatear (米虫)
看板C_and_CPP
标题[问题] 问一个物件相加 operator+ 的问题....
时间Fri May 15 10:49:29 2009
写了一个重载 + 号 的函式 , 目的是将两个 CWin 物件相加,
此物件是一个视窗, 相加结果是取视窗最大的宽高当作新视窗的宽高,
然後把新视窗的 title 设为 "new win"
CWin operator+(CWin &w)
{
int width,height;
width = this->width > w.width ? this->width: w.width;
height = this->height > w.height ? this->height : w.height;
return CWin(100,width,height,"new win");
}
CWin 的内容
class CWin
{
private:
int id;
int width;
int height;
char *title;
...
};
在 main 里头
win3 = win1+win2;
问题来了
我写了一个解构函式
~CWin()
{
cout<<"win"<<id<<" was destructed! \n";
delete [] title;
system("pause");
}
跑完 operator+ 後
这行 return CWin(100,width,height,"new win")
这个 CWin 新视窗会随着函式结束呼叫解构而被销毁
title 这块记忆体会被释放, 但是如果不释放, 会造成 memory leak
请问到底该怎麽写....
才不会 memory leak , win3 又可以在 operator+ 里 设定新 title ... ??
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.219.68.170
※ 编辑: aquatear 来自: 61.219.68.170 (05/15 10:51)
1F:推 legnaleurc:先看operator =有没有正确实作 05/15 11:00
2F:→ legnaleurc:否则就把title改成std::string 05/15 11:00
3F:→ aquatear:operator= 有没有实做跟这个问题比较无关 05/15 11:16
4F:→ aquatear:因为跑完 operator+後, title 就已经被销毁 05/15 11:17
5F:推 littleshan:你的 ctor 要为 title 配置记忆体并且复制参数 05/15 11:46
6F:→ littleshan:否则 delete 时会试图释放 string literal 导致错误 05/15 11:47
7F:→ littleshan:operator= 还有 copy constructor 也都是要注意的地方 05/15 11:47
8F:→ littleshan:这些问题,只要你改用 std::string 就可以一次解决 05/15 11:48
9F:→ aquatear:为什麽 std::string 可以解决呢 ? 解构函式不会去 delete 05/15 13:30
10F:→ aquatear:他吗? 05/15 13:30
11F:推 legnaleurc:重点不是它会不会解构,而是被解构前有没有被正常复制 05/15 13:59
12F:推 jerohands:string是STL容器之一,然而STL接近无敌啊XD 05/15 14:16
13F:→ dove1706:big three问题找过书吗,这里问会很片断 05/16 06:38