0

我有将普通指针指向字符串的方法

void parseResponseData(char* response); 

我称之为如下

parseResponseData((char *) response.c_str());  

响应是 std::string 类型。我的假设是它可能不是将 const char* 转换为 char* 的最佳方法,其次在这种情况下我可能会泄漏内存?需要专家意见吗?特别是我正在寻找是否泄漏内存。

4

3 回答 3

3

你真的不应该那样投。总体而言,避免在 c++ 中进行 c 样式转换,并且删除 const-ness 几乎从来都不是一个好的选择。如果您必须从指针使用中删除 constconst_cast并且真的尽量避免这种情况。

内存不会泄漏,因为字符串仍然拥有它的所有权。

于 2013-01-10T16:32:44.600 回答
2

您的问题没有提供足够的信息来明确回答。

为什么parseResponseData需要一个指向其输入字符串的非常量指针?它会修改字符串吗?如果是这样,那么您将无法std::string直接使用它。std::string不提供任何允许您将其修改为 C 样式字符串的接口。即使您不关心保留这些修改,修改由std::string::c_str().

如果parseResponseData不修改字符串,那么您现在拥有的应该可以工作(假设parseResponseData不尝试存储指针以供长期使用)。这里没有内存泄漏,因为std::string对象保留了返回的缓冲区的所有权c_str()以及释放它的责任。然而,它仍然看起来很丑parseResponseData:如果它是一个非修改操作,它应该需要一个const char *.

于 2013-01-10T16:54:01.223 回答
0

一旦response超出范围,底层 C 字符串将被释放。调用parseResponseData()不会复制 C 字符串,只会复制指针所以没有内存泄漏。

于 2013-01-10T16:32:58.950 回答