一,使用new与delete时,采取相同的形式
1,如果采用不同的形式带来的问题
string *p = new string[100];
delete p;
程序分析:
上面的程序会导致不明确的行为,p所包含的100个对象中有99个不太可能被正确释放,因为他们的析构函数有可能没被调用。
2,new与delete实际进行的操作
当我们使用new动态创建一个对象时,会有两件事情发生,一是:内存被分配出来;二是:对此内存会有一个构造函数被调用。当我们使用delete释放内存时,也有两件事情发生,一是:对此内存会有一个析构函数被调用;二是:释放掉内存。使用delete的最大问题是,即被删除的内存之内有多少个对象,可以理解为即将被删除的指针,所指的是单一对象还是对象数组。当我们使用delete [] 删除一个指针时,delete便认定指针指向的是一个对象数组,当我们使用delete删除一个指针时,delete便认定指针指向的是单一的对象。
3,使用规则
如果调用new时使用[],对应地调用delete时也使用[];如果在调用new时没有使用[],对应地调用delete时也不应使用[]。