15

コンストラクターchar*を使用してa を変換すると、次のようになります。std::string

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

std コンテナは、保存するように求められたときに値をコピーする傾向があることを知っています。文字列全体をコピーするか、ポインタのみをコピーするか? 後で私がそうstr = "Bye"すると、psが「Bye」を指すように変更されますか?

4

2 に答える 2

32

std::stringobject は内部バッファーを割り当て、psそこが指す文字列をコピーします。その文字列への変更はバッファに反映されずps、その逆も同様です。これを「ディープコピー」と呼びます。ポインタ自体だけがコピーされ、メモリの内容はコピーされない場合、それは「浅いコピー」と呼ばれます。

繰り返しstd::stringますが、この場合はディープ コピーを実行します。

于 2013-05-08T11:30:15.760 に答える
5

strには のコピーが含まれます。変更しても はps変更されstrませんps

于 2013-05-08T11:30:21.600 に答える