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

imk*_*dal 1 c++ heap stack struct

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

struct MyStruct
{
    int* nums;
};

MyStruct ms;
ms.nums = new int[4];
Run Code Online (Sandbox Code Playgroud)

我是否需要delete ms.nums;在退出程序之前调用,否则会nums自动取消分配成员变量,因为ms未在堆上声明MyStruct实例?

Var*_*aro 5

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

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

struct MyStruct
{
  int* nums;

  public :
     ~MyStruct()
      {
        if(nums != NULL)
            delete nums;
      }
};
Run Code Online (Sandbox Code Playgroud)

  • 给定问题中的new [],析构函数应该`delete []`.简单地说,删除NULL指针是一个无操作,因此不需要防范它,但是将构造函数设置为NULL/0/nullptr是个好主意.`struct`成员默认为`public:`. (2认同)