C++内存管理

来源:互联网 发布:数据共享交换平台 编辑:程序博客网 时间:2024/06/01 09:05
A、delete只可以释放由new动态申请的堆区的空间,不可以释放在栈区的空间,
是的 
B、而析构函数只会自动释放系统自己管理的栈区的空间,不会释放由new分配的空间 

析构函数只负责销毁对象,不负责栈空间的管理


栈里面是自动变量,不用主动销毁。

char *p = new char[5]; 

指针本身是在栈区的啊

指针所指的内存是在堆区的


对于A这句话:
char *p = new char[5];//变量p存放在栈空间, 它指向(new)的空间在堆内存中,

delete p;//调用delete p释放它指向的内存空间, 那变量p自己呢? 谁来删除?

================
p这个指针本身是栈上申请的。但是它指向的内容是堆上申请的。
栈上自动释放,堆上需要手动释放。



1、析构函数可以自己手动去调用吗?? 
可以但不推荐

  A、delete只可以释放由new动态申请的堆区的空间,不可以释放在栈区的空间
正确

  B、而析构函数只会自动释放系统自己管理的栈区的空间,不会释放由new分配的空间 
不完全正确,一般在析构函数里面释放在构造函数里分配的堆空间
至于“不会释放由new分配的空间”——delete对象相当于析构+free

char *p = new char[5];
p在函数返回的时候释放

Point p1(10,20) 
如果p1是全局变量,就在程序退出的时候释放,否则分配在栈里面,同样也是函数返回的时候释放


0 0
原创粉丝点击