是否必须释放std :: string.c_str()或std :: string.data()返回的指针?

Bes*_*sch 5 c++ string memory-management

据我所知,std::string当你调用c_str()/ data()方法时会创建一个内容的ident数组副本(使用/ out终止NUL-char,这里没关系).无论如何,该对象是否也负责释放这个阵列或者我必须这样做?

简而言之:

std::string hello("content");

const char* Ptr = hello.c_str();

// use it....

delete[] Ptr;   //// really ???
Run Code Online (Sandbox Code Playgroud)

我只是想在内存分配方面保持安全.

Alo*_*ave 7

不,你不需要释放ptr指针.

ptr指向位于内部位置某处的不可修改的字符串(实际上这是编译器的实现细节).


参考:

C++文档:

const char* c_str ( ) const;
Run Code Online (Sandbox Code Playgroud)

获取C字符串等效项

生成以字符串对象为内容的以null结尾的字符序列(c-string),并将其作为指向字符数组的指针返回.

将自动附加终止空字符.

返回的数组指向一个内部位置,其中包含此字符序列所需的存储空间以及终止的空字符,但此数组中的值不应在程序中修改,只保证在下次调用之前保持不变.字符串对象的非常量成员函数.

  • 你是对的,`ptr`不需要(实际上,一定不能)被释放.并且,该指针的性质是实现定义的.但是,该指针几乎肯定指向免费存储中的动态内存,并且几乎肯定不会指向静态只读内存. (3认同)