0

我正在尝试std::string_view尽可能多地使用 C 字符串,但是,每当我要包装的 C 字符串被动态分配时,我都依赖这种模式:

char *cs = get_c_string();
std::string s(cs);
free(cs);

这是浪费时间,因为它涉及 1 次分配、1 次复制和 1 次释放。

有没有办法更好地做到这一点?还是我需要编写自己的string_view包装器?

4

1 回答 1

4

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());
于 2017-10-03T18:20:31.027 回答