条款5:对应的new和delete要采用相同的形式
理由:
否则会导致不可预见的结果
注意:
1、必须自己告诉delete要被删除的指针指向的是单个对象呢还是对象数组,后者需要使用"[ ]"(eg: delete [ ] stringptr2;),在删除单个对象时使用"[ ]"或者在删除数组对象的时候没有使用"[ ]"都将导致不可预见的结果。解决方法Scott总结为"如果你调用new时用了[ ],调用delete时也要用[ ]。如果调用new时没有用[ ],那调用delete时也不要用[ ]。";
2、在使用typedef的时候,如果用new创建一个typedef定义的类型的对象后,该用什么形式的delete来删除。比如:
typedef string addresslines[4]; //一个人的地址,共4行,每行一个string
string *pal = new addresslines; // 注意"new addresslines"返回string*,
//和"new string[4]"返回的一样
delete时必须以数组形式与之对应:
delete pal;// 错误!
delete [] pal;// 正确
条款6:析构函数里对指针成员调用delete
增加一个指针成员意味着几乎都要进行下面的工作:
1.在每个构造函数里对指针进行初始化。对于一些构造函数,如果没有内存要分配给指针的话,指针要被初始化为0(即空指针)。
2.删除现有的内存,通过赋值操作符分配给指针新的内存。
3.在析构函数里删除指针。