之前一直理解错了,今天排坑
首先定义class A
class A
{
public:
A(int v) : var(v)
{
fopen_s(&file, "test", "r");
}
~A()
{
fclose(file);
}
private:
int var;
FILE *file;
};
接下来运行
class A *pAa = new class A[3];
delete pAa;
第一个A元素当然会被析构,但是接下来并不是只有第一个A元素的地址被收回。
而是整个A数组的地址都会被回收!
但是更严重的问题是,pAa真正的起始地址是pAa-4,如果频繁delete pAa,会造成严重的段错误。
当然,new[]和delete[]必须严格配对,能不犯尽量不犯错误。
可能在胡说八道,希望大佬批评指正。