c++ - 为结构C++中的指针分配和删除内存

标签 c++ pointers dynamic-allocation

给定以下结构声明:

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/

相关文章:

C++,向上箭头检测为向上和向右

c++ - 如何在 C++ 中调用另一个类中的类的构造函数?

c++ - 传递数组时类中出现错误指针错误

c++ - 设置地址后是否需要删除指针?

C: 创建、传递和访问指向常量字符串的常量指针数组

c++ - QT QTcpServer 没有及时连接

c++ - 使用 (MFC) CList<T, T&> 而不是 CList<T, const T&> 的任何理由?

c++ - 从 QMap 中删除一个指针?

c - 为什么这个 C 代码不起作用?

c - 为矩阵动态分配数组