簡體   English   中英

“char *”和“char * = new char[]”之間的C++區別

[英]C++ difference between “char *” and “char * = new char[]”

所以,如果我想聲明一個字符數組,我可以這樣

char a[2];
char * a ;
char * a = new char[2];

忽略第一個聲明,其他兩個使用指針。 據我所知,第三個聲明存儲在堆中,並使用 delete operator 釋放。 第二個聲明是否也將數組保存在堆中? 這是否意味着如果某些內容存儲在堆中並且未釋放,則可以在文件中的任何位置使用,例如具有文件鏈接的變量? 我在一個函數中嘗試了第三個和第二個聲明,然后在另一個函數中使用了該變量,但沒有用,為什么? 第二個和第三個聲明之間還有其他區別嗎?

  • 在第一種情況下, a[2]在堆棧中存儲 2 個字符。
  • 在第二種情況下,根本沒有分配 - a是一個未初始化的指針。
  • 在第三種情況下,在堆上分配了 2 個字符。

您認為堆分配的變量可以在您的進程中共享是正確的,但是,您需要確保傳遞分配的堆內存的位置 - 例如通過從方法或函數返回a或通過a eg 的范圍增加到類范圍。

delete將釋放堆分配。 在您的情況下, delete應該只在場景 3 中使用,因為在 #1 中,堆棧變量在超出范圍時會被清除,而在 #2 中,您沒有分配任何內存。

由於上述內容很容易在堆分配上的所有權轉移過程中導致混亂,因此可以使用諸如auto_ptrboost 的 shared_ptr 之類的智能指針來簡化操作。

暫無
暫無

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

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