当你使用new的时候,一是内存被分配(通过operator new函数),然后是构造函数被调用。当你delete的时候,析构函数被调用,然后内存被释放(通过operator delete)。
游戏规则:如果你调用new时使用[ ],你必须在对应调用delete时也使用[ ]。如果你调用new时没使用[ ],那么也不该在对应delete时使用[ ]。
为了避免诸如此类的错误,最好不要对数组形式做typedefs动作。因为C++标准库含有string,vector等templates,可将数组的需求降至几乎为0。
总结
- 如果你在new表达式中使用了[ ],必须在想要的delete表达式中也使用[ ]。如果你在new表达式中不使用[ ],一定不要再相应的delete表达式中使用[ ]。