new分配内存

2/10/2017来源:ASP.NET技巧人气:1108

指针真正的用武之处在于,在运行阶段分配未命名的内存来储存值,格式:

typeName * pointer_name = new typeName;

如:int * pn = new int;

new分配的内存块通常与常规变量声明分配的内存块不同。变量存储在栈(stack)中,new从被称为堆(heap)或自由存储区的内存区域分配内存。

使用完内存后,需要将其归还给内存池:delete pn;

记住一定要配对地使用new和delete,否则将造成内存泄漏。

不要使用delete释放不是new分配的内存,也不要尝试释放已经释放的内存块,C++标准指出,这样的结果时不确定的。即不要delete两次。不过,对空指针使用delete是安全的。

一般来说,不要创建两个指向同一个内存块的指针,因为这将增加错误地删除同一个内存块两次的可能性。

使用new创建动态数组:

int * psome = new int [10]; //并返回第一个元素的地址

delete [] psome;

方括号告诉程序,应该释放整个数组,而不仅仅是指针指向的元素。如果使用new时不带方括号,则delete也不应用方括号;如果使用new时带方括号,则delete时要带方括号。

注意psome + 1算术代表一个单元,增加量等于它指向的类型的字节数。

string类内置new和delete。