内存被泄露了吗?

时间:2013-01-10 16:30:44

标签: c++

我的方法是将普通指针转换为字符串

void parseResponseData(char* response); 

我将此称为

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

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

3 个答案:

答案 0 :(得分:3)

你真的不应该这样投。总的来说,避免在c ++中进行c样式转换,并且删除const-ness几乎不是一个好的选择。如果必须从指针中删除const,请使用const_cast真的尝试避免这种情况。

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

答案 1 :(得分:2)

您的问题未能提供足够的信息以便最终得到解答。

为什么parseResponseData需要一个指向其输入字符串的非const指针?它会修改字符串吗?如果是这样,那么您将无法直接与std::string一起使用。 std::string没有提供允许您将其修改为C样式字符串的任何接口。即使您不关心保留这些修改,修改std::string::c_str()返回的缓冲区仍然是非法的。

如果parseResponseData没有修改字符串,那么你现在应该有的工作(假设parseResponseData不会尝试存储指针以供长期使用)。这里没有内存泄漏,因为std::string对象保留了c_str()返回的缓冲区的所有权以及解除分配它的责任。但是,它在parseResponseData部分看起来仍然很丑陋:如果它是非修改操作,则应该采用const char *

答案 2 :(得分:0)

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

相关问题