gpt4 book ai didi

c++ - 从 char* move std::string 的构造函数

转载 作者:可可西里 更新时间:2023-11-01 18:26:20 28 4
gpt4 key购买 nike

我有一个函数 f 返回一个 char*。函数文档说:

The user must delete returned string

我想从中构造一个 std::string。要做的琐碎的事情是:

char* cstring = f();
std::string s(cstring);
delete cstring;

是否可以使用 C++ 功能做得更好?我想写类似的东西

std::string(cstring)

避免泄漏。

最佳答案

std::string 将制作一个空终止字符串参数的拷贝并管理该拷贝。没有办法让它拥有您传递给它的字符串的所有权。所以你所做的是正确的,我建议的唯一改进是检查 nullptr,假设它是 f() 的有效返回值。这是必要的,因为采用 char const *std::string 构造函数要求参数指向有效数组,而不是 nullptr .

char* cstring = f();
std::string s(cstring ? cstring : "");
delete[] cstring; // You most likely want delete[] and not delete

现在,如果您不需要 std::string 的所有接口(interface),或者如果避免复制很重要,那么您可以使用 unique_ptr 来而是管理字符串。

std::unique_ptr<char[]> s{f()}; // will call delete[] automatically

您可以通过 s.get() 访问托管的 char * 并且当 时字符串将被删除 s 超出范围。

即使您选择第一个选项,我也建议在将 f() 的返回值传递给 std 之前将其存储在 unique_ptr 中::string 构造函数。这样,如果构造抛出,返回的字符串仍将被删除。

关于c++ - 从 char* move std::string 的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28680872/

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