Как создать std :: string непосредственно из массива char * без копирования?

Скажем, у меня есть массив символов, который я выделил в куче и который я хочу преобразовать в 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/ ), конструктор строки выполняет копию буфера, который я ему передаю, предоставляя мне освободить буфер (позже строка освобождает свой внутренний буфер.) Я бы хотел выделить свой буфер, передать управление им строке, а затем освободить мой буфер, когда он будет разрушен.

Вопрос ] инициализация std :: string из char * без копии выглядела многообещающе, но мой код полагается на вызовы API («WriteIntoArray» в приведенном выше примере), которые должны записывать в массив символов, поэтому мне нужно создать C -style char * buffer и не могу преобразовать мой код для использования только встроенных строковых операций (что и было предложено).

Есть ли какой-нибудь стандартный способ сделать это, или я должен просто ритуал мой собственный класс струн (тьфу)? Спасибо!

18
задан Community 23 May 2017 в 11:54
поделиться