【发布时间】:2017-10-03 18:04:06
【问题描述】:
我正在尝试尽可能多地使用 std::string_view 来包装 C 字符串,但是,每当我要包装的 C 字符串是动态分配的时,我都依赖于这种模式:
char *cs = get_c_string();
std::string s(cs);
free(cs);
这是浪费时间,因为它涉及 1 次分配、1 次复制和 1 次释放。
有没有办法更好地做到这一点?还是我需要编写自己的string_view 包装器?
【问题讨论】:
-
如何处理
string_view背后的内存所有权完全取决于您。这就是类型的全部意义。获取它的代码并不关心它是如何拥有的。 -
如何使用
unique_ptr和自定义删除器管理字符串的生命周期,并根据需要从中创建string_views?您可以将其包装在一些自定义类型中,以保存 c 字符串的长度,以避免每次创建string_view时都必须计算它。 -
每当也称为很少。
-
@manni66 你知道 OP 使用了哪些 C 库吗?也许这不是很好的风格,但这并不意味着它很少出现在他们的代码库中。
标签: c++ c++17 string-view