假设我有一个字符数组,已经在堆上进行了分配,并且我想将其转换为std::string。目前我正在执行以下操作:
char *array = new char[size];
WriteIntoArray(array, size);
std::string mystring(array);
delete[] array;
return mystring; // or whatever
根据我从互联网上所读到的(http://www.cplusplus.com/reference/string/string/string/),字符串构造函数会复制我传递给它的缓冲区,我需要手动释放这个缓冲区(稍后,string对象会释放它内部的缓冲区)。我想做的是分配一个缓冲区,将其控制权转移给字符串,然后在字符串被销毁时让它释放我的缓冲区。这个问题初始化char*指针的std::string不进行复制看起来很有前途,但我的代码依赖于API调用(如上面例子中的“WriteIntoArray”),必须写入一个字符数组,因此我必须创建一个C风格的char*缓冲区,并且无法将我的代码转换为只使用内置的字符串操作(这是建议的答案)。
有没有一些标准的方法可以做到这一点,或者我应该编写自己的字符串类(呃)?谢谢!
WriteIntoArray
放置了一个空终止符,这需要在调用后删除;你可能想在返回之前添加mystring.resize(size-1);
。如果它没有添加空终止符,那么你应该使用vector<char>
而不是string
。 - Mark Ransom