我正在尝试std::string_view
尽可能多地使用 C 字符串,但是,每当我要包装的 C 字符串被动态分配时,我都依赖这种模式:
char *cs = get_c_string();
std::string s(cs);
free(cs);
这是浪费时间,因为它涉及 1 次分配、1 次复制和 1 次释放。
有没有办法更好地做到这一点?还是我需要编写自己的string_view
包装器?
我正在尝试std::string_view
尽可能多地使用 C 字符串,但是,每当我要包装的 C 字符串被动态分配时,我都依赖这种模式:
char *cs = get_c_string();
std::string s(cs);
free(cs);
这是浪费时间,因为它涉及 1 次分配、1 次复制和 1 次释放。
有没有办法更好地做到这一点?还是我需要编写自己的string_view
包装器?
string_view
没有任何所有权语义。如果您想拥有它,请使用智能指针。
std::unique_ptr<char, decltype(&std::free)> cs(get_c_string(), std::free);
或者:
template <auto Deleter>
struct FuncDeleter {
template <class P>
void operator()(P* p) const { Deleter(p); }
};
std::unique_ptr<char, FuncDeleter<std::free>> cs(get_c_string());