當我轉換char*
到std::string
使用構造:C++:char指針指向std :: string轉換複製內容嗎?
char *ps = "Hello";
std::string str(ps);
我知道性病容器傾向於複製值時,他們被要求保存。 複製整個字符串還是隻有指針? 如果事後我做str = "Bye"
會改變ps指向「再見」嗎?
當我轉換char*
到std::string
使用構造:C++:char指針指向std :: string轉換複製內容嗎?
char *ps = "Hello";
std::string str(ps);
我知道性病容器傾向於複製值時,他們被要求保存。 複製整個字符串還是隻有指針? 如果事後我做str = "Bye"
會改變ps指向「再見」嗎?
std::string
對象將分配內部緩衝區,並將在那裏複製ps
指向的字符串。對該字符串的更改不會反映到ps
緩衝區中,反之亦然。它被稱爲「深層複製」。如果只有指針本身被複制而不是內存內容,它將被稱爲「淺拷貝」。
重申:std::string
在這種情況下執行深層複製。
str將包含ps的副本,更改str不會更改ps。
他們有賦值運算符重載,實際上,如果我猜對了,他們會使用複製和交換算法。並且會從char *創建一個臨時字符串對象。 – 2013-05-08 11:29:56
@Koushik:你猜錯了。在這裏製作一個淺拷貝將是違反直覺的,並且容易出錯。 – 2013-05-08 11:33:20
@VioletGiraffe是的,我意識到指針不復制,並有一個深層複製,應該有一個內部緩衝區來保持這一點。 – 2013-05-08 11:36:15