为了账号安全,请及时绑定邮箱和手机立即绑定

C++中 函数中定义的局部指针需要delete吗?

C++中 函数中定义的局部指针需要delete吗?

胡子哥哥 2019-02-12 10:11:45
例如:void f(){double *p; /***///delete [] p ;是否需要?}函数结束后,这个指针p需要手动释放吗如果定义成double *p = new double;需要delete 吗?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超12个赞

C++无论何种数据,是否要delete关键看其空间是否使用new分配的。
1,函数冲定义的局部变量指针,单纯是一个局部变量是不用delete;
2,C++ 如果类中有一个指针数据成员,而没有用new, 析构函数也是不用delete的;
在类或函数中,int* ,char* 这些只要不是new的,也同样不用释放,系统会自动把他们占的内存释放掉,只有new的才会手动的去delete
原理:
int*, char* ,这些定义是局部变量,存在于栈上,比如int *p;p在栈上,而且p的值也是栈的一个地址。
但是当int *p = new int ;这时候,p这个变量是在栈上的。但是p的值是一个地址,这个地址是堆上的一个地址。如果不delete p;那么,这个地址会一直被占用着,不能被其他的对象所使用,所以我们用完这个地址,要把这个地址释放掉。
因此栈的空间会自动释放,而堆里的空间必须手动释放。

查看完整回答
反对 回复 2019-03-22
?
跃然一笑

TA贡献1826条经验 获得超6个赞

是否需要对指针delete取决于指针指向的内存是否是用new操作符申请的。 用了new表示动态分配了内存,需要用delete将内存还给系统。 对于不是动态申请的内存,在对象声明周期结束后就会自动删除,不需要delete。

查看完整回答
反对 回复 2019-03-22
?
慕森卡

TA贡献1806条经验 获得超8个赞

当然需要。凡是使用new申请的内存,系统都不会自动释放的,都需要你手动delete,如果申请的是数组,也就是new [] ,就需要对用的手动delete[] .
不论在哪里,都需要,不分局部还是全局。

查看完整回答
反对 回复 2019-03-22
  • 3 回答
  • 0 关注
  • 4349 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信