簡體   English   中英

堆棧上的結構內的動態數組(在堆上)會發生什么情況?

[英]What happens to a dynamic array (on the heap) within a struct on the stack?

我擔心的是是否應該釋放數組。 這是一個例子:

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”語句后自動刪除。 它也會刪除“值”嗎?

它確實會釋放指針 values ,但不會釋放它所指向 的指針 -畢竟, a_struct對您分配給該指針的內容了解多少? 也許這是指向分配在堆棧上的東西的指針,或者指向與另一個struct共享的數組的指針。

因此,是的,您需要手動取消分配它(盡管在現代C ++中,經常使用“智能指針”來管理內存)。

不,不是,您應該手動將其刪除。 myStruct超出范圍(因此myStruct.values成員,即指針無效)與動態分配的內存無關。 黃金法則:如果您調用new[] ,請始終delete[] (與newdelete相同)。

是的,它是必需的,該結構僅存儲數組的地址。 如今,人們只存儲std :: vector <>(或者如果您只想擁有指向std :: unique_ptr <>的指針)。

什么都不會被“刪除”。 堆棧彈出。 期。 由於該結構沒有析構函數,因此不會發生其他任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM