kewenliang
函数运行结束时,函数体中的变量是否被释放?
函数运行结束时,函数体中的变量是否被释放?
变量包括全局变量和局部变量
kewenliang
楼上几位说的都很好。
《c++ primer》上说:不要返回局部对象的引用。因为函数执行结束时会释放分配给局部对象的存储空间,此时对局部对象的引用会指向不确定的内存。举例如下:
[code]const string &manip(const string &s)
{
string ret = s;
return ret;
}[/code]
此例中的ret为局部变量。
但是下面的这个例子却可以正确返回引用
[code]const string &ShorterString(const string &s1, const string &s2)
{
return s1.size()<s2.size()?s1:s2;
}[/code]
此例中的引用形参是直接与实参相关联的,也就是实参的别名,但是当函数运行结束时,他们所占用的内存空间不也被释放吗?
jiangf
函数体内的局部变量是在栈空间上,一旦遇到了函数结束,与该函数对应的栈空间就被释放;
全局变量是定义在一个C/CPP文件中对应的栈空间,要等这段程序执行完毕才会被释放;
kewenliang
[quote]原帖由 [i]jiangf[/i] 于 2008-6-30 10:40 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8700975&ptid=1184322][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
函数体内的局部变量是在栈空间上,一旦遇到了函数结束,与该函数对应的栈空间就被释放;
全局变量是定义在一个C/CPP文件中对应的栈空间,要等这段程序执行完毕才会被释放; [/quote]
嗯
明白了
谢谢各位
kewenliang
[quote]原帖由 [i]scutan[/i] 于 2008-6-30 10:42 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8700997&ptid=1184322][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
因为是引用, 此时的变量存在周期并不是在这个函数中的. [/quote]
明白了
谢谢。
77h2_eleven
[quote]原帖由 [i]kewenliang[/i] 于 2008-6-30 10:01 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8700581&ptid=1184322][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
楼上几位说的都很好。
《c++ primer》上说:不要返回局部对象的引用。因为函数执行结束时会释放分配给局部对象的存储空间,此时对局部对象的引用会指向不确定的内存。举例如下:
const string &manip(const s ... [/quote]
要看是指针变量还是普通变量