所以,我在C ++书中看到的基本文本输入函数的上下文中提出这个问题:
char *getString()
{
char temp[80];
cin >> temp;
char * pn = new char[strlen(temp + 1)];
strcpy(pn, temp);
return pn;
}
因此,temp声明了一个包含80个字符的数组,这是一个自动变量,一旦getString()
返回,它的内存将被释放。有人建议,如果由于某种原因返回temp
,它在函数之外的使用将不可靠,因为一旦函数完成就释放了内存。但是既然我也在同一个上下文中声明pn
,为什么它的内存也不会被丢弃?
答案 0 :(得分:11)
因为您在new
上声明的对象是在堆上分配的,而像temp
这样的变量在堆栈中。
当你的函数返回时,它的堆栈帧被释放,但堆不受影响。