簡體   English   中英

C ++中的動態內存分配需要new運算符new嗎?

[英]Dynamic memory allocation in C++ require the new operator new?

int d;
cin >> d;
int asdf[d];

這被認為是動態內存分配嗎? 根據http://www.cplusplus.com/doc/tutorial/dynamic/ ,似乎我什至不能編譯它,因為不使用new運算符的數組只能以恆定大小聲明,也許我讀錯了。 (我在GNU CCC編譯器中使用CodeBlocks)

那和有什么區別

int d;
int *asdf;
cin >> d;
asdf = new int[d];

在刪除之前,使用新生命創建的數組唯一的區別是,而第一個數組在離開作用域后就被釋放了嗎?

int x[n]; 可變長度數組 (VLA),具有自動存儲期限(即“在堆棧上”)。 它在C89或C ++ 98/03中無效,但在C99中引入,通常可以作為擴展使用,例如在GCC中。

在某些平台上,也可以使用非標准的alloca()函數來模仿該功能,該函數在VLA變得常見之前就已使用。

用第一種方法分配的內存來自分配給應用程序的堆棧。 當您使用new時,從堆分配內存,堆提供的內存方式比從堆獲取的方式多。 但是要使用new,變量必須是與數組相同類型的指針。 指針變量保存第一個存儲單元的地址。 int * a =新的int [x]; 將保留x個存儲單元,如果在程序仍在運行時專門刪除指針,則將釋放該單元。

暫無
暫無

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

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