我的方法是将普通指针转换为字符串
void parseResponseData(char* response);
我将此称为
parseResponseData((char *) response.c_str());
响应是std :: string类型。我的假设是它可能不是将const char *转换为char *的最佳方式,其次我可能在这种情况下泄漏内存?需要专家意见吗?特别是我正在寻找是否在此泄漏记忆。
答案 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字符串,只会复制指针。所以没有内存泄漏。