[英]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[]
(與new
和delete
相同)。
是的,它是必需的,該結構僅存儲數組的地址。 如今,人們只存儲std :: vector <>(或者如果您只想擁有指向std :: unique_ptr <>的指針)。
什么都不會被“刪除”。 堆棧彈出。 期。 由於該結構沒有析構函數,因此不會發生其他任何事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.