這很尷尬。
<string.h>
是C標頭。它沒有定義string
。它看起來像你的版本<iostream>
直接或間接包括<string>
,否則會出現錯誤。
字符串(由成對引號分隔的那些東西)可能在任何地方,包括只讀內存段。 (他們確實佔用了內存,但是你必須有很多文本才能產生重大影響:類似戰爭與和平不會佔用完整的大小。)在這種情況下,std::string
是用該值進行初始化,然後再賦值給它。 std::string
處理它使用的內存。
在C++中,幾乎沒有理由指向std::string
。 std::string
沒有內容就佔用太多空間,並且管理內容本身的內存。你是否與char *
混淆?
您new
一個爲b
std::string
,然後再指定地址b
沒有delete
荷蘭國際集團的內存。這是內存泄漏。你爲b
編new
仍然分配在那裏,但它沒有辦法delete
它,所以它會佔用內存的程序期間。
然後,一旦您將a
的地址分配給b
,您delete b;
。這是一個糟糕的想法,並可能以一種可能無法預測的方式搞砸重要事情。只有您用new
獲得的delete
內存。 (這裏delete
ing的重要不是b
是一個指針,應該刪除,但它指向的內存不是通過new
得到的。)
內存管理的工作原理與此類似。字符串文字被分配到某處。所有你知道的是,你不應該試圖改變它或以任何方式它delete
它。使用該值,不要碰其餘的。 A std::string
爲其內容管理內存,並在其析構函數中處理該內存。一個在函數或其他塊中聲明的變量一旦超出範圍就會被銷燬(儘管它可能指向的內容不會被自動銷燬;只有當它是一個智能指針或管理自己的內存或其他內容時)。如果你的內存是new
,請不要丟棄指針值,直到它爲delete
d。如果您還沒有new
ed內存,請不要delete
它。
+1你的答案比我的更完整。 – karlphillip 2010-07-30 16:33:05
或者您可以將字符串放在較小的範圍內......並不是在大多數情況下都是值得的。 – 2010-07-30 17:08:06