std :: string.assign(const char *)或op =(with const char *)会创建char *的副本吗?

时间:2014-09-05 18:44:37

标签: c++ string

通过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*)

1 个答案:

答案 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?