Преобразование strstream в sstream конфликт о c_str ()

У меня есть этот блок кода, как написано с strstream, И я преобразовал это в sstream как ниже. Я не уверен, но я думаю printStream->str() возвращает строковый объект с копией (временной) содержимого в буфере потока, указанного printStreamи тогда вы вызываете c_str() на нем и получить const char *и затем отбрасывает константу, а затем возвращает указатель вне области действия функции. Я думаю, так как это временное значение, вы получаете от printStream->str(), вы будете использовать указатель для освобождения памяти вне этой функции. Как мне это сделать?

char * FieldData::to_string() const
{
if(printStream)
return printStream->str();
FieldData* notConst = (FieldData*) this;
notConst->printStream = new std::ostrstream;
// check heap sr60315556
if (notConst->printStream == NULL)
return NULL;
*(notConst->printStream) << "Invalid Field Type";
*(notConst->printStream) << '\0';
return printStream->str();
}

char * FieldData::to_string() const
{
if(printStream)
return const_cast<char *>(printStream->str().c_str());
FieldData* notConst = (FieldData*) this;
notConst->printStream = new std::ostringstream;
// check heap sr60315556
if (notConst->printStream == NULL)
return NULL;
*(notConst->printStream) << "Invalid Field Type";
*(notConst->printStream) << '\0';
return const_cast<char *>(printStream->str().c_str());
}

0

Решение

Измените тип возврата на std::string и вернуть std::string объект напрямую.

1

Другие решения

Я думаю, что функция называется to_string действительно очень, действительно должен вернуть std::string,

И тогда весь этот мусор можно заменить

std::string FieldData::to_string() const
{ return "Invalid Field Type"; }
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector