如何删除这个对象?
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
之前,您应该按照其使用的方式重组您的程序
由于您已经删除了指针,调用它就像转到一个什么都没有的特定目标地址并期望它做某事。当您的指针超出范围时,您可以依靠析构函数自动重新分配堆中的内存。
我已经声明了一个带有构造函数和析构函数的简单 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
由于您已经删除了指针,调用它就像转到一个什么都没有的特定目标地址并期望它做某事。当您的指针超出范围时,您可以依靠析构函数自动重新分配堆中的内存。