【发布时间】:2014-01-30 20:42:00
【问题描述】:
考虑以下函数:
unique_ptr<char> f(const wstring key, const unsigned int length)
{
assert(length <= key.length());
const wstring suffix = key.substr(length, key.length() - length);
const size_t outputSize = suffix.length() + 1; // +1 for null terminator
char * output = new char[outputSize];
size_t charsConverted = 0;
const wchar_t * outputWide = suffix.c_str();
wcstombs_s(&charsConverted, output, outputSize, outputWide, suffix.length());
return unique_ptr<char>(output);
}
这里的目的是接受一个 wstring,从末尾选择 length 字符,并将它们作为包装在 unique_ptr 中的 C 样式字符串返回(根据另一个库的要求 - 我当然没有选择那种类型:))。
我的一个同行顺便说他认为这会泄漏内存,但他没有时间详细说明,我没有看到。任何人都可以发现它,如果可以,请解释我应该如何解决它?我可能有我的眼罩。
【问题讨论】:
-
如果
wcstombs_s失败了怎么办? -
如果有选择,返回
std::string会更有意义。但听起来你别无选择。 -
RAII:new的结果应该直接放在unique_ptr中。
标签: c++ memory-leaks