使用`std :: string :: c_str`是否返回动态分配的数组?

时间:2013-04-21 21:30:21

标签: c++ string dynamic-allocation

std::string::c_str上的文档说:

"返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即一个C字符串),表示字符串对象的当前值。"

这个数组是否在调用c_str时动态分配?如果不是它来自哪里?

2 个答案:

答案 0 :(得分:4)

在C ++ 11之前,它未被指定。 string对象管理它。使用C ++ 11,它指向string个对象数据。

答案 1 :(得分:4)

对于C ++ 2003,这取决于标准库实现。它的实际存储很可能由std::string的实例管理。一些实现可以使用内部缓冲区,一些可以使用单独的预分配缓冲区。虽然它是一个常量访问器,但是库实现可用的选项是有限的。

除了标准库的不同实现之外,您可能不应该在标准库允许的范围之外处理那些内存。

有趣的是,对于C ++ 11,这个定义要多一些,它必须指向内部缓冲区并且是std::string::data的同义词。