指针真正的用武之处在于,在运行阶段分配未命名的内存来储存值,格式:
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。
新闻热点
疑难解答