c++ 什么变量需要手动释放内存,什么变量 不需要手动释放
4个回答
展开全部
使用 new 操作符获取的内存需要手动释放 delete
比如有class A
A a;
A* p1=&a;
A* p2=new A();
上例中,p1,p2都是指向A的指针,但是p1指向的a不是new出来的,就不用delete,会自动释放
p2指向的是new出来的,需要手动释放,如果在没有释放p2的情况下就将p2指向改变
如
// delete p2;
p2=p1;
就会造成内存泄漏,应该在之前加上delete p2;
比如有class A
A a;
A* p1=&a;
A* p2=new A();
上例中,p1,p2都是指向A的指针,但是p1指向的a不是new出来的,就不用delete,会自动释放
p2指向的是new出来的,需要手动释放,如果在没有释放p2的情况下就将p2指向改变
如
// delete p2;
p2=p1;
就会造成内存泄漏,应该在之前加上delete p2;
追问
char * a="ssss"
字符串呢
追答
不需要手动释放,只要记住需要手动释放的内存,必然是用new操作符或者malloc函数之类动态分配的内存
展开全部
动态申请的内存需要手动释放
比如 malloc对应free new对应delete
比如 malloc对应free new对应delete
追问
char * a="ssss"
这样的呢
追答
这样说不用的,因为"ssss"这个串已经在常量区中开辟了,指针a指向了这块内存的首地址
这块内存在程序结束后会自动回收
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
补充一下,写小型程序时,不释放new (malloc)申请的内存也不会出错,所以我们容易范这样的错误,如果是大型程序不释放的话,在运行的过程中就会出现查不原因的错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
栈里面变量不需要手动释放。堆里面的分情况。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询