堆:
C++程序的内存格局通常分为四个区:
1.全局数据区(data area)
2.代码区(code area)
3.栈区(stack area)
4.堆区(即自由存储区)(heap area)
全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数所分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间都被作为堆区。
C++的new\delete机制比malloc()/free()更加方便。运算符new分配堆内存,如果成功,则返回只向该内存的空间,如果失败,则返回NULL。所以每次使用运算符new动态分配内存时,都应测试new的返回指针值,以防分配失败。
从堆上分配对象数组,只能调用默认的构造函数,不能调用其他任何构造函数。
使用堆空间往往由于:
1.直到运行时才能直到需要多少对象空间;
2.不知道对象的生存期到底有多长;
3.直到运行时才知道一个对象需要多少内存空间。
拷贝构造函数:
当一个对象创建时,分配了资源,这时,就需要定义自己的拷贝构造函数,使之不但拷贝成员,也拷贝资源。也就是说,如果你的类需要析构函数来析构资源,则它也需要一个拷贝构造函数。这种情况下,对对象进行的是深拷贝。
默认拷贝构造函数对对象进行的是浅拷贝。