c++ - 如何直接从 char* 数组创建 std::string 而无需复制?

标签 c++ string stl buffer

假设我有一个字符数组,我在堆上分配了它,我想将它转换成一个 std::string。目前我正在做以下事情:

char *array = new char[size];
WriteIntoArray(array, size);
std::string mystring(array);
delete[] array;
return mystring; // or whatever

根据我在 Internet 上阅读的内容 (http://www.cplusplus.com/reference/string/string/string/),字符串构造函数执行了我传递给它的缓冲区的拷贝,让我释放缓冲区(稍后,字符串释放其内部缓冲区)。我想做的是分配我的缓冲区,将它的控制权转移给字符串,然后让它在我的缓冲区被破坏时释放它。

问题initializing std::string from char* without copy看起来很有希望,但是我的代码依赖于 API 调用(上例中的“WriteIntoArray”),这些调用必须写入一个字符数组,所以我必须创建一个 C 风格的 char* 缓冲区,并且不能将我的代码转换为仅使用内置字符串操作(这是建议的答案)。

是否有一些标准的方法来做到这一点,或者我应该只写自己的字符串类(呃)?谢谢!

最佳答案

如果您使用的是符合标准的 C++0x 实现,或者是保证 std::string 连续存储的众多 C++ 库之一,那么您可以获得 char* 直接指向 std::string 使用的存储空间。

例如:

std::string mystring;
mystring.resize(size);
WriteIntoArray(&mystring[0], size);
return mystring;

但是,您可能需要仔细考虑空终止符。

关于c++ - 如何直接从 char* 数组创建 std::string 而无需复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700480/

相关文章:

c++ - Qt 5 beta2, Qt Creator 2.6, MSVC error : Qt Creator needs a compiler set up to build. 在套件选项中配置编译器

c# - 在 C# 中,从字符串中解析出此值的最佳方法是什么?

c++ - 使用C++标准库以对数时间进行堆化

c++ - 迭代器可以指向特定位置而不是STL集中的值吗?

c++ - 如何在模板类中使用 lambda 作为 STL Compare 方法?

c++ - C 和 C++ 中 void 指针的区别

c++ - 继承树中奇怪的复制构造函数行为

c++ - 将带有可变参数构造函数的对象放入映射中

c++ - 算法和算法性能的缺陷

java - 字符串:如何用单个字符替换多个可能的字符?