[英]What is the difference between 'char()' and 'char' in 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
是一個未初始化的指針。 您認為堆分配的變量可以在您的進程中共享是正確的,但是,您需要確保傳遞分配的堆內存的位置 - 例如通過從方法或函數返回a
或通過a
eg 的范圍增加到類范圍。
delete
將釋放堆分配。 在您的情況下, delete
應該只在場景 3 中使用,因為在 #1 中,堆棧變量在超出范圍時會被清除,而在 #2 中,您沒有分配任何內存。
由於上述內容很容易在堆分配上的所有權轉移過程中導致混亂,因此可以使用諸如auto_ptr
或boost 的 shared_ptr 之類的智能指針來簡化操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.