ZBLOG

std::vector CPhotoDesignView::SplitChineseCharacters(CString text) { std::vector arr; int len = text.GetLength(); USES_CONVERSION; for (int i = 0; i < len; i++) { WCHAR ch = text.GetAt(i); ...

在您提供的代码中,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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=3489

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?