c++ 返回指针引用 空间是否会自动删除

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:41:56
来个例子

int& re()
{
int *p = new int;
return *p;
}

void x()
{
int a = re();
}

int main()
{
x();
return 0;
}

//这里p所申请的空间会不会自动删除??

首先回答,不会.
在c+的空间分配中,有两种方式,一是栈分配,一是堆分配,在栈中分配的空间,在作用域结束后自动释放,而在堆中分配的空间需要手动释放,一般来说函数中局部变量是在栈中分配的,而用new或用molloc函数分配的空间是在堆中的,所以,有一个new或molloc就要对应一个delete或free,否则程序肯定有bug.
你可以这样来测试以上结论:
char *test1()
{
char p[512];
return p;
}
char *test2()
{
char *p = new char[512];
return p;
}
int main(int argc, _TCHAR* argv[])
{
int i = 0;
cout << "-----------------test1-------------------" << endl;
for(i=0;i<1000000;i++)
{
test1();
}
cout << "-----------------test2-------------------" << endl;
for(i=0;i<1000000;i++)
{
test2();
}
return 0;
}
在第二个循环前加个断点,在return加个断点,打开任务管理器,可以看到程序运行到第一个断点时,内存使用并没有增加,而运行到return时,内存消耗了几百MB,程序退出后又恢复了.