簡體   English   中英

初始化結構語法的指針

[英]Initialize a pointer to struct syntax

兩者之間在內存分配方面是否有任何區別

struct_type * mystruct = new struct_type();

struct_type *mystruct = new struct_type[1];

這取決於您所說的“內存分配差異”。

首先, newnew[]是兩個獨立的內存分配機制,可以(並且將)分配具有不同內部布局的內存,例如,具有與分配的內存塊關聯的與實現相關的不同家庭信息。 重要的是要記住,第一個分配必須與delete配對,第二個分配必須與delete []配對。 同樣,由於這個原因,在典型的實現中,第二個分配可能比第一個分配消耗更多的內存。

其次,您在第一次分配中使用的初始化器語法()觸發已分配對象的值初始化。 同時,在第二個分配中,您根本不提供初始化程序。 根據struct_type類的具體情況,這可能導致初始化方面的重大差異。 例如,如果struct_type定義為struct struct_type { int x; } struct struct_type { int x; } ,確保第一個分配將mystruct->x設置為零,而第二個分配將在mystruct->x保留垃圾值。 您必須執行new struct_type[1]()來消除這種(可能是意外的)差異。

它們將分配相同數量的可見/可用內存,即容納一個對象所需的內存。 但是語義不同,前者是指向單個對象指針 ,而后者是包含一個對象數組 當取消分配時,您應該使用

delete mystruct;

在第一種情況下

delete []mystruct; 

在第二種情況下。

另一個區別是,編譯器必須保存有關后一種情況的一些簿記信息,例如,它必須知道數組中的項數,以便可以正確刪除它。 當然,您的structure必須具有默認構造函數才能在后一種情況下使用。

第一行將創建一個結構對象,並將其地址返回給您的指針。 第二行將創建一個包含1個結構對象的數組,並將數組的起始地址返回給指針

我認為這兩行代碼在內存分配方面沒有區別。

暫無
暫無

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

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