关于CString的内存释放问题。
CString GetString()
{
CString strTemp("aaaaaa");
return strTemp;
};
void func()
{
CString strGet = GetString();
}
请问上面代码中,strTemp和strGet的内存如何释放?
问题点数:50、回复次数:11Top
1 楼elang(忆郎)回复于 2001-04-28 19:56:00 得分 5
两个变量都是在栈里分配 当函数结束的时候自动回收内存Top
2 楼buding()回复于 2001-04-28 20:45:00 得分 0
CString的字符串可以很长,应该在堆中分配吧。。。Top
3 楼lazyeric(yvo's cb)回复于 2001-04-28 20:51:00 得分 5
在GetString函数内部,strTemp在赋值给一个临时对象之后,就自动调用析构函数了。
在func函数中,只要过了func函数的右大括号“}”,strGet也开始调用自己的析构函数了。Top
4 楼taosi(桃子)回复于 2001-04-28 21:53:00 得分 5
自动释放,不用担心!Top
5 楼zhaowuqing(我尽力而为)回复于 2001-04-28 22:02:00 得分 5
这两个内存的释放绝对不用你处理的Top
6 楼yinxingshu(银杏树)回复于 2001-04-28 23:16:00 得分 5
两个变量都是在栈里分配,CString类中存储字符串的指针指向的内存是在堆中分配的,在函数返回时自动释放着两个变量,这个时候会调用CString的析构函数,释放在堆中分配的字符串内存Top
7 楼buding()回复于 2001-04-30 13:30:00 得分 0
其实 return strTemp时,它会调用CString(CString&),只要在这个函数中深拷贝就行了。Top
8 楼buding()回复于 2001-04-30 13:32:00 得分 0
好象不能给分啊。。。Top
9 楼elang(忆郎)回复于 2001-04-30 14:34:00 得分 5
to buding()
string 的确是在栈里分配的Top
10 楼tsingbo(tsingbo)回复于 2001-04-30 19:09:00 得分 15
如果你要弄清楚这个问题,用Debug一步一步跟踪是最好的方法。
别人有可能会由于错误的经验而误导你,虽然大家都出于好意。
Top
11 楼godhand78(仙人掌)回复于 2001-04-30 20:09:00 得分 5
string 是在栈里分配的,不过return strTemp时,不知道有没有进行深拷贝Top




