堆栈中的结构中的动态数组(在堆上)会发生什么?

时间:2013-08-23 23:56:54

标签: c++

我担心的是数组是否应该被释放。这是一个例子:

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”语句中自动删除。它也会删除“值”吗?

4 个答案:

答案 0 :(得分:4)

它确实释放指针 values,但 不是指向 - 毕竟,{{1知道你分配给那个指针的是什么?也许它是指向堆栈上分配的东西的指针,或指向与另一个a_struct共享的数组的指针。

所以,是的,您需要手动解除分配(尽管在现代C ++中,通常使用“智能指针”来管理内存)。

答案 1 :(得分:2)

不,它没有,你应该手动删除它。 myStruct超出范围(因此myStruct.values成员,即指针无效)与动态分配的内存无关。 黄金法则:如果您致电new[],则始终delete[] newdelete相同)。

答案 2 :(得分:0)

是的,它是必需的,struct只存储数组的地址。 这些天人们只会存储一个std :: vector<> (或者如果你只想要一个std :: unique_ptr<>的东西指针。)

答案 3 :(得分:0)

没有任何内容被“删除”。弹出堆栈。期。由于struct没有析构函数,所以没有其他事情发生。