您的位置:首页 > 编程语言 > C语言/C++

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

2016-04-09 16:54 369 查看
我们都知道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[] 回收空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: