gpt4 book ai didi

c++ - 从 unique_ptr 到 unique_ptr

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:54 30 4
gpt4 key购买 nike

移动unique_ptr<char[]> 的最佳成语是什么?到 unique_ptr<const char[]>

用例:假设您在某个缓冲区中创建了一个 C 字符串。为确保在出现异常时进行正确清理,可以使用 unique_ptr 引用该缓冲区.构造字符串后,您可能希望将其移动到某个类成员,声明为 unique_ptr<const char[]>。以避免进一步修改字符串。

这是我迄今为止最好的:

std::unique_ptr<const char[]> res;
std::unique_ptr<char[]> buf(new char[4]);
buf[0] = 'f';
buf[1] = buf[2] = 'o';
buf[3] = '\0';
res = std::unique_ptr<const char[]>(const_cast<const char*>(buf.release()));

单纯的移动似乎不行,可能是删除器类型不同所致。甚至省略了 char 中的显式转换至 const char不起作用,如 Should `unique_ptr< T const [] >` accept a `T*` constructor argument? 中所述

是否有更好的成语来实现我上面概述的目标?考虑到这个概念起初听起来多么简单,我的代码看起来很笨拙而且相当冗长。

最佳答案

VS2010 和 VS2012 的标准库允许使用 res = std::move(buf) 进行转换,作为扩展和对 DR2118 的响应. libc++ 和 GCC 4.8 的 libstdc++ 也是如此。

对于 GCC 4.7,您无法绕过 const_cast,但至少您可以稍微缩短该行:

res.reset(const_cast<char const*>(buf.release()));

关于c++ - 从 unique_ptr<char[]> 到 unique_ptr<const char[]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14873577/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com