コンストラクターchar*
を使用してa を変換すると、次のようになります。std::string
char *ps = "Hello";
std::string str(ps);
std コンテナは、保存するように求められたときに値をコピーする傾向があることを知っています。文字列全体をコピーするか、ポインタのみをコピーするか? 後で私がそうstr = "Bye"
すると、psが「Bye」を指すように変更されますか?
コンストラクターchar*
を使用してa を変換すると、次のようになります。std::string
char *ps = "Hello";
std::string str(ps);
std コンテナは、保存するように求められたときに値をコピーする傾向があることを知っています。文字列全体をコピーするか、ポインタのみをコピーするか? 後で私がそうstr = "Bye"
すると、psが「Bye」を指すように変更されますか?
std::string
object は内部バッファーを割り当て、ps
そこが指す文字列をコピーします。その文字列への変更はバッファに反映されずps
、その逆も同様です。これを「ディープコピー」と呼びます。ポインタ自体だけがコピーされ、メモリの内容はコピーされない場合、それは「浅いコピー」と呼ばれます。
繰り返しstd::string
ますが、この場合はディープ コピーを実行します。
str
には のコピーが含まれます。変更しても はps
変更されstr
ませんps
。