我很难理解为什么在调用时调用空指针的delete解耦器.因为指针的内容为空,我甚至没有为对象保留任何空间malloc或者new它正在调用什么解构函数?
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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
deconstructor
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
你有Sak* s;没有创建一个空引用或空引用,而是一个未初始化的指针.如果你想要一个NULL指针,请使用Sak* s = NULL;.
您的代码只是被破坏,使用s(通过传递给它delete)的值而不初始化它(通过将其设置为某个已知值).它的行为将是奇怪和不可预测的.