如果我们考虑使用引用计数的 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;
在非常量上下文中会执行不必要的深度复制。我对吗?实现如何处理这个细节?