C++中使用new、new[ ]、delete、和delete[ ]运算符来进行动态内存分配和释放。
new 分配一个空间;
delete 释放由new分配的单一空间;
new[ ] 分配一个数组;
delete[ ] 释放由new[ ]分配的数组。
语法: new + 数据类型。
new运算符用来动态地分配存储空间。
如果分配成功,则返回一个指向分配的存储空间的指针。
int *p;
p = new int;
delete运算符用来释放空间。
delete p;
new[ ] 运算符用于动态分配一个数组。
如果分配成功,则第一个单元的的地址将保存在指针中。
p = new int[50];
delete[ ] 运算符用于释放空间。
注:在释放由new[]创建的对象数组时,"[ ]"不可省略!而空格中的值可缺省。
delete[]p;
在创建对象时,如果要动态分配的方式,可以使用运算符new在堆中为其分配内存空间;在对象使用完毕时,要用delete来释放空间;
Point* data;// 创建了对象指针,但没有创建指针所指向的对象。
对象引用不分配储存空间。
========================== 更新 ==========================
堆对象:在程序运行时,根据需要随时可以创建可以被创建和删除的对象。
创建和删除堆对象分别用到:new和delete;
语法: new <数据类型> (<初始值列表>)
Point *obj; // 创建一个指向类Point的对象指针obj.
obj = new Point(3, 6);
/* 运算符new创建一个类Point的对象,将它的地址值赋给obj;
对该对象进行初始化,调用具有两个参数构造函数,初始值为3和7. */
由于堆是有限的,它可能会变拥挤,使申请空间会失败,而new返回一个空指针,因此,必须在使用new生成的指针之前进行检查。
Point *obj;
obj = new Point(2); // 分配空间
if(!obj) // 检查空间
{
cout << "Out of Memory!" << endl;
}