我有将普通指针指向字符串的方法
void parseResponseData(char* response);
我称之为如下
parseResponseData((char *) response.c_str());
响应是 std::string 类型。我的假设是它可能不是将 const char* 转换为 char* 的最佳方法,其次在这种情况下我可能会泄漏内存?需要专家意见吗?特别是我正在寻找是否泄漏内存。
我有将普通指针指向字符串的方法
void parseResponseData(char* response);
我称之为如下
parseResponseData((char *) response.c_str());
响应是 std::string 类型。我的假设是它可能不是将 const char* 转换为 char* 的最佳方法,其次在这种情况下我可能会泄漏内存?需要专家意见吗?特别是我正在寻找是否泄漏内存。
你真的不应该那样投。总体而言,避免在 c++ 中进行 c 样式转换,并且删除 const-ness 几乎从来都不是一个好的选择。如果您必须从指针使用中删除 constconst_cast
并且真的尽量避免这种情况。
内存不会泄漏,因为字符串仍然拥有它的所有权。
您的问题没有提供足够的信息来明确回答。
为什么parseResponseData
需要一个指向其输入字符串的非常量指针?它会修改字符串吗?如果是这样,那么您将无法std::string
直接使用它。std::string
不提供任何允许您将其修改为 C 样式字符串的接口。即使您不关心保留这些修改,修改由std::string::c_str()
.
如果parseResponseData
不修改字符串,那么您现在拥有的应该可以工作(假设parseResponseData
不尝试存储指针以供长期使用)。这里没有内存泄漏,因为std::string
对象保留了返回的缓冲区的所有权c_str()
以及释放它的责任。然而,它仍然看起来很丑parseResponseData
:如果它是一个非修改操作,它应该需要一个const char *
.
一旦response
超出范围,底层 C 字符串将被释放。调用parseResponseData()
不会复制 C 字符串,只会复制指针。所以没有内存泄漏。