2013-05-08 91 views
9

當我轉換char*std::string使用構造:C++:char指針指向std :: string轉換複製內容嗎?

char *ps = "Hello"; 
std::string str(ps); 

我知道性病容器傾向於複製值時,他們被要求保存。 複製整個字符串還是隻有指針? 如果事後我做str = "Bye"會改變ps指向「再見」嗎?

+0

他們有賦值運算符重載,實際上,如果我猜對了,他們會使用複製和交換算法。並且會從char *創建一個臨時字符串對象。 – 2013-05-08 11:29:56

+2

@Koushik:你猜錯了。在這裏製作一個淺拷貝將是違反直覺的,並且容易出錯。 – 2013-05-08 11:33:20

+0

@VioletGiraffe是的,我意識到指針不復制,並有一個深層複製,應該有一個內部緩衝區來保持這一點。 – 2013-05-08 11:36:15

回答

20

std::string對象將分配內部緩衝區,並將在那裏複製ps指向的字符串。對該字符串的更改不會反映到ps緩衝區中,反之亦然。它被稱爲「深層複製」。如果只有指針本身被複制而不是內存內容,它將被稱爲「淺拷貝」。

重申:std::string在這種情況下執行深層複製。

3

str將包含ps的副本,更改str不會更改ps。