我用gcc测试并确认gcc的std :: string实现了COW:
#include <string>
#include <iostream>
int main() {
std::string a(50, 'c');
std::string b = a;
*const_cast<char*>(a.c_str()) = 'A';
std::cout << "a: " << a << "\nb: " << b << std::endl;
}
打印:
a: Accccccccccccccccccccccccccccccccccccccccccccccccc
b: Accccccccccccccccccccccccccccccccccccccccccccccccc
b改为。如果我使用clang或VC,测试结果会有所不同。所以我想知道gcc的字符串COW是否是线程安全的?在多线程环境中使用std :: string是否可以?