gpt4 book ai didi

c++ - 为什么在空指针上调用解构函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:25 26 4
gpt4 key购买 nike

我很难理解为什么当我调用delete时调用了空指针的解构器。因为指针的内容是空的,我什至没有为对象保留任何空间使用 mallocnew 它调用什么解构器?

class Sak{
public:
Sak(){cout << "defalt constructor" << endl;}
~Sak(){
cout << "deconstructor" << endl;
}
};

int main(int argc, char *argv[])
{
Sak* s;
delete s;

system("PAUSE");
return EXIT_SUCCESS;
}

输出:

deconstructor
Press any key to continue . . .

最佳答案

您有 Sak* s;,它不会创建空引用或 null 引用,而是创建未初始化的指针。如果您想要一个 NULL 指针,请使用 Sak* s = NULL;

您的代码刚刚被破坏,使用了 s 的值(通过将其传递给 delete)而没有对其进行初始化(通过将其设置为某个已知值)。它的行为将是奇怪且不可预测的。

关于c++ - 为什么在空指针上调用解构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24482643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com