C++:删除在堆栈上声明的结构的字段

标签 c++ struct heap-memory stack-memory

如果我声明一个这样的结构:

struct MyStruct
{
    int* nums;
};

MyStruct ms;
ms.nums = new int[4];

我需要打电话吗 delete ms.nums;在退出我的程序之前或将成员变量 nums自动被释放,因为 MyStruct 实例 ms没有在堆上声明?

最佳答案

是的,您必须删除它。结构的默认析构函数不会这样做。它只会删除保存对象地址的指针变量,并且对象将永远保留。

最好在结构的析构函数中进行删除

struct MyStruct
{
  int* nums;

  public :
     ~MyStruct()
      {
        if(nums != NULL)
            delete nums;
      }
};

关于C++:删除在堆栈上声明的结构的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21595568/

相关文章:

c++ - 在模板方法c++中传递结构参数

c - realloc() 与旧大小的问题

C 结构指针问题

c++ - 返回在堆上分配的类的实例 (C++)

c++ - 无限循环不接受输入

c++ - 在函数中使用时自己的 operator+ 的奇怪行为(Point3D(0,0,0)+ 点)

c++ - OpenCL:for 循环中的 CL_OUT_OF_RESOURCES

c - 将混合类型的结构传输到不同内存位置的相同结构

c++ - 如何控制销毁堆对象的顺序?

c++ - 读出 XML 在 C++ 中提供意外输出