为什么解构器会调用一个空指针

Ste*_*veL 0 c++

我很难理解为什么在调用时调用空指针的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)

Dav*_*rtz 5

你有Sak* s;没有创建一个空引用或空引用,而是一个未初始化的指针.如果你想要一个NULL指针,请使用Sak* s = NULL;.

您的代码只是被破坏,使用s(通过传递给它delete)的值而不初始化它(通过将其设置为某个已知值).它的行为将是奇怪和不可预测的.