C++ Primer Plus上这么描述“在构造函数中使用new来分配内存时,必须在相应的析构函数中使用delete来释放内存。如果使用new[](包括中括号)来分配内存,则应使用delete[](包括中括号)来释放内存。”
但是,如果使用new分配内存,使用delete[]释放,会有什么结果呢。
#include <iostream>;
using namespace std;
class T {
public:
T() { cout << "constructor" << endl; }
~T() { cout << "destructor" << endl; }
};
int main()
{
const int NUM = 3;
T* p1 = new T[NUM];
cout << hex << p1 << endl;
//delete[] p1;
delete p1;
T* p2 = new T[NUM];
cout << p2 << endl;
delete[] p2;
T* p3 = new T;
cout << p3 << endl;
delete[] p3;
}
运行结果,
p1用delet p1会报错,无法运行,需使用delete[] p1;
p2释放了3次运行正常;
p3程序会无限释放,跑飞了,这是一般教材都没有提到的。