Преобразование 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());
}

2 ответа

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

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

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

std::string FieldData::to_string() const
{ return "Invalid Field Type"; }
Другие вопросы по тегам