给定以下结构声明:
struct Student
{
char * name;
int * test;
float gpa;
};
int main() {
Student *newObject = new Student;
newObject->name = new char[10];
newObject->test = new int;
return 0;
}
我的问题是如何销毁创建的动态变量?
我尝试了 delete newObject->name;
和 delete newObject->test;
但它似乎不起作用,因为它向我显示了与之前相同的地址 delete
。使用 delete newObject; 删除对象就足够了吗? newObject = nullptr;
?
最佳答案
如果您使用的是 C++,则应该在您的结构中使用构造函数和析构函数(除非您真的需要 POD 类型的结构)。
struct Student
{
Student(){
name = new char[10];
test = new int;
}
~Student(){
delete[] name;
delete test;
}
char * name;
int * test;
float gpa;
};
int main() {
Student *newObject = new Student;
delete newObject;
return 0;
}
当您在 newObject
上使用 delete 时,会自动调用结构内部指针的删除。
请记住,使用 delete 不会删除任何数据!它只是释放已使用的内存——比如“嘿,我不再使用这部分内存”,因此它可以被其他一些数据使用。您必须始终使用 delete
,当您使用完某个指针时,否则会发生内存泄漏。
关于c++ - 为结构C++中的指针分配和删除内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28496534/