在您提供的代码中,std::vector<std::unique_ptr<char*>>
是一个存储了指向 char*
的独占指针的向量容器。然而,这样的用法是不正确的,因为您将 char*
类型包装在 std::unique_ptr
中并将其推入向量中,但实际上并没有使用 new
运算符来分配内存。
此外,在循环结束后删除指针是不正确的,因为这些指针实际上应该由 std::unique_ptr
自动管理。手动删除可能导致错误释放或悬空指针。
如果您想将已分配的字符数组以独占所有权方式存储在向量中,可以尝试以下修改:
std::vector<std::unique_ptr<char[]>> CPhotoDesignView::SplitChineseCharacters(CString text)
{
std::vector<std::unique_ptr<char[]>> arr;
int len = text.GetLength();
USES_CONVERSION;
for (int i = 0; i < len; i++)
{
WCHAR ch = text.GetAt(i);
if ((ch >= 0x4E00) && (ch <= 0x9FFF))
{
// ConvertWCharToChar 函数会new char[length]
char* convertedChar = ConvertWCharToChar(&ch);
arr.push_back(std::unique_ptr<char[]>(convertedChar));
}
else
{
// 处理非中文字符的逻辑
}
}
return arr;
}
注意到这里使用了 std::unique_ptr<char[]>
,表示一个指向字符数组的独占指针。这样可以确保在函数返回时,存储在向量中的字符数组将会被自动释放,避免了显式删除操作。
请确保 ConvertWCharToChar
函数正确地分配和复制所需的字符数组,并且返回的指针不再需要手动删除。
内容由零声教学AI助手提供,问题来源于学员提问