如果我声明一个这样的结构:
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/