[英]Initialize a pointer to struct syntax
兩者之間在內存分配方面是否有任何區別
struct_type * mystruct = new struct_type();
和
struct_type *mystruct = new struct_type[1];
?
這取決於您所說的“內存分配差異”。
首先, new
和new[]
是兩個獨立的內存分配機制,可以(並且將)分配具有不同內部布局的內存,例如,具有與分配的內存塊關聯的與實現相關的不同家庭信息。 重要的是要記住,第一個分配必須與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.