参照カウントを使用する std::string 実装を検討する場合は、次のシナリオを検討してください。
int main()
{
string english = "Hello";
string german = english; //refcnt = 2
string german2 = german;
/* L1 */ german[1] = 'a';
/* L2 */ *(german2.begin() + 1) = 'A';
cout << english << endl << german << endl << german2 << endl;
return 0;
}
L1 と L2 で何が起こるか? 参照カウントが壊れていて、ディープ コピーが実行されていますか? 私はそう思いますが、私の懸念は、それが発生した場合、簡単なことをすることです:
cout << german[1] << endl;
または単純な:
cout << *(german.begin()) << endl;
const 以外のコンテキストでは、不要なディープ コピーが実行されます。私は正しいですか?実装はこの詳細をどのように処理しますか?