我担心的是数组是否应该被释放。这是一个例子:
typedef struct
{
int *values;
int length;
} a_struct;
void foo()
{
a_struct myStruct;
myStruct.values = new int[NUM];
delete[] myStruct.values; // Is this needed?
return;
}
我的理解是myStruct(在堆栈中)将在“return”语句中自动删除。它也会删除“值”吗?
答案 0 :(得分:4)
它确实释放指针 values
,但 不是指向 - 毕竟,{{1知道你分配给那个指针的是什么?也许它是指向堆栈上分配的东西的指针,或指向与另一个a_struct
共享的数组的指针。
所以,是的,您需要手动解除分配(尽管在现代C ++中,通常使用“智能指针”来管理内存)。
答案 1 :(得分:2)
不,它没有,你应该手动删除它。 myStruct
超出范围(因此myStruct.values
成员,即指针无效)与动态分配的内存无关。 黄金法则:如果您致电new[]
,则始终delete[]
(new
和delete
相同)。
答案 2 :(得分:0)
是的,它是必需的,struct只存储数组的地址。 这些天人们只会存储一个std :: vector<> (或者如果你只想要一个std :: unique_ptr<>的东西指针。)
答案 3 :(得分:0)
没有任何内容被“删除”。弹出堆栈。期。由于struct没有析构函数,所以没有其他事情发生。