簡體   English   中英

如何直接從 char* 數組創建 std::string 而無需復制?

[英]How to create a std::string directly from a char* array without copying?

假設我有一個字符數組,我在堆上分配了它,並且我想將其轉換為 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/ ),字符串構造函數執行我傳遞的緩沖區的副本,讓我釋放緩沖區(稍后,字符串釋放其內部緩沖區)。 我想做的是分配我的緩沖區,將它的控制權轉移到字符串,然后讓它在我的緩沖區被破壞時釋放它。

從 char* 初始化 std::string 而沒有復制的問題看起來很有希望,但是我的代碼依賴於 API 調用(上例中的“WriteIntoArray”),它必須寫入一個字符數組,所以我必須創建一個 C 風格char* 緩沖區,並且無法將我的代碼轉換為僅使用內置字符串操作(這是建議的答案)。

有沒有一些標准的方法來做到這一點,或者我應該寫我自己的字符串 class (呃)? 謝謝!

如果您使用的是符合標准的 C++0x 實現,或者是保證std::string連續存儲的眾多 C++ 庫之一,那么您可以獲得一個直接指向std::string使用的存儲的char* .

例如:

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

但是,您可能需要仔細考慮 null 終結器。

您可以實現自己的 std::allocator ,而不是為您的字符串分配新的 memory ,而是使用您已經實例化的區域作為源。

然后,您應該使用分配器實例化您的 std::string。

http://www.codeproject.com/Articles/4795/C-Standard-Allocator-An-Introduction-and-Implement

您不能 std::string 擁有指針,從而將數據復制到它分配的空間中。

你可以做的是:

std::string  mystring(size, ' ');
WriteIntoArray(&mystring[0], size);
return mystring; // or whatever

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM