如何删除这个对象?

How to delete this object?

我已经声明了一个带有构造函数和析构函数的简单 class。但是,当我删除该对象时,它会给出 runtime error 并且不会执行进一步的输出。

class Student {
public:
    string name;

    Student(string name) {
        this->name=name;
    }

    ~Student() {
        this->name="";
    }

};

int main() {
    Student* s = new Student("a");
    cout<<s->name<<endl;
    delete s;                                 /// Problem In This Line
    cout<<"Name Here -> "<<s->name<<endl;
    return 0;
}

我的问题是什么??我应该如何删除或调用析构函数?

指针删除后将无法使用。如果您想证明您的析构函数有效,请将 cut 语句放在其中而不是放在 main() 中。

What is my problem here?? How should I delete or call the destructor??

在您 delete s 之后,该对象就消失了,因此您当然不能再访问它了。在其生命周期之外访问对象是典型的未定义行为。

对于您的情况,只需重新排序您的代码即可。

cout<<"Name Here -> "<<s->name<<endl;
delete s;

正如@Code-Apprentice 所说。销毁对象后,为此目的分配的内存将被释放,因此在您的示例中,您试图到达一块未分配的内存,这会导致所谓的 NPE (NullPointerException)。

从堆中删除后无法调用某些东西。所以如果你想使用这条线

cout<<"Name Here -> "<<s->name<<endl;

在删除 Student 对象 s

之前,您应该按照其使用的方式重组您的程序

由于您已经删除了指针,调用它就像转到一个什么都没有的特定目标地址并期望它做某事。当您的指针超出范围时,您可以依靠析构函数自动重新分配堆中的内存。