在C++中使用关键字new来分配自由存储区中的内存。在new后面跟上要为其分配内存的对象的类型,让编译器知道需要多少内存。因此new int 在自由存储区中分配4字节内存。
new的返回值是一个内存地址。而内存地址应存到指针中,因此应将new的返回值付给一个指针。要在自由存储区中创建一个int变量,可以这样做:
当然,可以在声明指针的同事对其进行初始化,从而在一行代码中完成上述工作:
int *pPointer = new int;
无论采用哪种方式,pPointer都将指向自由存储区中的一个int。可以像使用其他指向变量的指针那样使用它,将一个值赋给它指向的内存区域:
*pPonter = 72;
Delete 将内存归还给自由存储区。
请切记,使用new分配的内存不会被自动释放。如果指针变量指向自由存储区中的内存块,离开该指针的作用域时,该内存块不会归还给自由存储区。相反,该内存块被视为已分配出去,同事由于该指针不再可用,你将无法访问该内存块。当指针为局部变量时将发生这样的情况。当函数返回时,在该函数中声明的指针将不在作用域中,从而丢失。使用new分配的内存不会被释放,而是变得不可用。
这被称为内存泄漏,因为在程序结束前,该内存块再也无法使用,就像从计算机中泄漏了一样。
为防止内存泄漏,应将分配的内存归还给自由存储区。为此可以是用关键字delete。例如:
delete pPointer;
注意:删除指针时,实际上是释放了其地址存储在指针中的内存。这相当于说:将该指针指向的内存归还给自由存储区。该指针仍然存在,可以重新给它赋值。
示例:
输出:
localVariable: 5
*pLocal: 5
*pHeap: 7
*pHeap: 9