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实例?
是的,您必须删除.. struct的默认析构函数不会这样做.它只会删除保存对象地址的指针变量,并且对象将永远保持不变.
最好在struct的析构函数中进行删除
struct MyStruct
{
int* nums;
public :
~MyStruct()
{
if(nums != NULL)
delete nums;
}
};
Run Code Online (Sandbox Code Playgroud)