как правильно перегрузить оператор приведения char * в C ++? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть класс с числовым значением.Мне нужно добавить перегрузку оператора, которая при приведении к char * (или wchar *) возвращает строку с читаемым значением.

Я пытался с

VAR::operator char*()
{
  STRING test;
  test.format("%d",value); //fills string with "readable" data
  return test.Get() //returns the char* content of the test;
}

, но вызов деструктора STRING удаляет значение и возвращает случайные данные.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Есть идеи?

  1. Использовать строки вместо указателей символов.

    VAR :: operator STRING ();

  2. Если нет 1., тогда верните свежую копию строки.

char const *retVal = new char[test.size() + 1]; std::strncpy(retVal, test.Get(), test.size()); retVal[test.size()] = '\0'; return retVal;.

(Не забудьте delete[]это позже.)

Наконец, вы можете сделать test членом вашего класса и вернуть его содержимое;тогда он выживет после окончания функции.
0 голосов
/ 19 сентября 2018

Вы не можете сделать это, если только вы не потребуете, чтобы вызывающий абонент вызвал delete[] для возвращенного указателя.

VAR::operator char*()
{
  char* test = new char[required_bytes];
  // Fill 'test'
  return test;
}

Лучше и разумнее просто вернуть объект std::string (или std::wstring).Когда вызывающий абонент хочет получить из него C-строку, он может вызвать c_str() метод w/string.

...