《C++ primer》——ch5 表达式:new和delete

  1. delete后指针置0

int i;
int *p = &i;
delete p;
p = 0; //p = NULL;

释放指针后,p变成了未定义,但p仍然存放之前所指向对象的地址,p所指向的内存已释放,因此p不再有效。

这种情况下,p变成悬垂指针,它往往会引发程序错误,且难发现。最后一句话则保证了安全性,使得p释放后不再指向任何对象,这句话必须存在。

2.   与动态内存分配相关的三种常见错误

  • 删除(delete)指向动态分配内存的指针失败,即内存泄漏,因而无法将该块内存还给自由存储区;
  • 读写已删除的对象,该问题可以通过上述指针置0来检测;
  • 对同一个内存空间delete两次:两个指针指向同一个动态创建的对象,其中一个做delete运算,将该对象的内存空间返还给自由存储区,然后接着delete第二个指针,此时自由存储区可能会被破坏。
3. vector *pvec1=new vector(10) 分配一个vector容器,里面有10个string元素;
vector *pvec2=new vector[10] 分配一个数组,数组含有vector类型10个元素。

你可能感兴趣的:(C++学习)