Выдача в память константного указателя из двух разных обратных вызовов в асинхронном коде - PullRequest
0 голосов
/ 23 марта 2019

У меня есть сценарий в моем коде C ++, где у меня есть некоторый поток данных (const char *), и я хочу сделать следующее с потоком

  1. Сериализация потока с использованием сериализации обратного вызова
  2. асинхронно отправляет сериализованный поток на некоторый внешний сервер.
  3. Выполнить Callback в случае успеха или неудачи

Теперь я должен освободить память, занятую необработанным потоком (не сериализованным). В настоящее время я удаляю его в сериализации обратного вызова. Проблема в том, что есть некоторые негативные случаи, когда Serialize Callback не сработает. И когда я освобождаю память в обратном вызове сериализации, у меня есть утечка памяти. Но мой готовый обратный вызов все равно будет вызван. Я не хочу перемещать обратный вызов по выполнению удаления второй части, потому что я ожидаю много данных и не хочу хранить в памяти что-то большее, чем необходимо. Я думаю сделать следующее:

  1. передать необработанный поток в serializeCb и doneCb.
  2. В SerialiizeCb удалите необработанный поток и сделайте его пустым.
  3. В doneCb проверьте, имеет ли необработанный поток значение NULL, если нет, то удалите его.

Это выглядит чисто? или я могу сделать что-то лучше.

void serializeCb(const char * rawStream)
{
    // some other code.
    delete rawStream;
    rawStream = NULL;
}

void doneCb(const char* rawStream)
{
    if(rawStream != NULL){
        delete rawStream;
    }
}
...