通过c ++代码,它看起来像是副本,但我不能确定。通过" copy",我的意思是strcpy在内部发生。并且std:string在内部传递时没有指向同一个char *的指针。
const char *somestring = ...
std::string str;
str.assign(somestring);
// or
str = somestring; //in my impl, op= calls to assign(const char*)
答案 0 :(得分:2)
std::string
将始终从char *
指向的数组中复制。您还可以在某些构造函数中提供迭代器范围。
在一个std::string
的副本复制或引用计数取决于您使用的C ++库。
C ++ 2011标准要求std :: string制作真正的副本。 2003标准允许参考计数副本。
GNU libstdc ++使用引用计数字符串。为了向后兼容,甚至2011标准GCC也随之构建。否则,它无法链接到使用2003标准构建的代码。
有一个预处理器定义可以打开新行为。
另请参阅std::string copy constructor NOT deep in GCC 4.1.2?和Is std::string refcounted in GCC 4.x / C++11?