0

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

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

4 回答 4

4

它确实释放了指针 values,但没有释放它指向的东西——毕竟,你a_struct知道你分配给那个指针的东西吗?也许它是指向分配在堆栈上的东西的指针,或者指向与另一个共享的数组struct

所以,是的,您需要手动释放它(尽管在现代 C++ 中经常使用“智能指针”来管理内存)。

于 2013-08-23T23:59:52.850 回答
2

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

于 2013-08-23T23:59:41.333 回答
0

是的,它是必需的,结构只存储数组的地址。现在人们只会存储一个 std::vector<> (或者如果你只是想要一个指向 std::unique_ptr<> 的拥有指针)。

于 2013-08-24T00:06:26.140 回答
0

没有任何东西被“删除”。堆栈被弹出。时期。由于该结构没有析构函数,因此不会发生其他任何事情。

于 2013-08-24T01:49:30.590 回答