C++中有三种创建对象 内存分配问题

来源:互联网 发布:安卓去视频广告软件 编辑:程序博客网 时间:2024/06/06 17:14

我们都知道C++中有三种创建对象的方法,如下:

复制代码
#include <iostream>using namespace std;class A{private:    int n;public:    A(int m):n(m)    {    }    ~A(){}};int main(){    A a(1);  //栈中分配    A b = A(1);  //栈中分配    A* c = new A(1);  //堆中分配  delete c;    return 0;}
复制代码

第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放,所以这就产生一个问题是把对象放在栈中还是放在堆中的问题,


基本数据类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。

0 0
原创粉丝点击