Отсутствие у меня опыта работы с C ++, или, скорее, моего раннего изучения языков с сборкой мусора, в настоящий момент очень утомляет меня, и у меня возникают проблемы при работе со строками в C ++.
Чтобы было очень ясно, использование std :: string или equlivents не вариант - это полностью char *.
Итак: что мне нужно сделать, это очень просто и сводится к объединению строк. Во время выполнения у меня есть 2 класса.
Один класс содержит информацию «type» в форме базового имени файла.
в шапке:
char* mBaseName;
и позже, в .cpp загружается информация, переданная откуда-то еще.
mBaseName = attributes->BaseName;
2-й класс предоставляет информацию о версии в виде суффикса к базовому имени файла, это статический класс, который в настоящее время реализован так:
static const char* const suffixes[] = {"Version1", "Version", "Version3"}; //etc.
static char* GetSuffix()
{
int i = 0;
//perform checks on some data structures
i = somevalue;
return suffixes[i];
}
Затем во время выполнения базовый класс создает нужное имя файла:
void LoadStuff()
{
char* suffix = GetSuffix();
char* nameToUse = new char[50];
sprintf(nameToUse, "%s%s",mBaseName,suffix);
LoadAndSetupData(nameToUse);
}
И вы сразу видите проблему. nameToUse никогда не удаляется, утечка памяти.
Суффиксы представляют собой фиксированный список, но имена базовых файлов являются произвольными. Созданное имя должно сохраняться после окончания «LoadStuff ()», так как неясно, когда и как оно будет использовано впоследствии.
Возможно, я слишком беспокоюсь или слишком глуп, но код, аналогичный LoadStuff (), встречается и в других местах, поэтому его нужно решить. Это разочаровывает, так как я не знаю достаточно о том, как все работает, чтобы увидеть безопасное и «нехорошее» решение. В C # я бы просто написал:
LoadAndSetupData(mBaseName + GetSuffix());
и не нужно беспокоиться.
Любые комментарии, предложения или советы приветствуются.
Обновление
Проблема с кодом, который я вызываю LoadAndSetupData (), заключается в том, что в какой-то момент он, вероятно, действительно копирует имя файла и сохраняет его локально, но фактическое создание экземпляров асинхронно, LoadAndSetupData фактически помещает вещи в очередь, и в этот момент по крайней мере, он ожидает, что переданная строка все еще существует.
Я не контролирую этот код, поэтому не могу обновить его функцию.