У меня есть сценарий в моем коде C ++, где у меня есть некоторый поток данных (const char *), и я хочу сделать следующее с потоком
- Сериализация потока с использованием сериализации обратного вызова
- асинхронно отправляет сериализованный поток на некоторый внешний сервер.
- Выполнить Callback в случае успеха или неудачи
Теперь я должен освободить память, занятую необработанным потоком (не сериализованным). В настоящее время я удаляю его в сериализации обратного вызова. Проблема в том, что есть некоторые негативные случаи, когда Serialize Callback не сработает. И когда я освобождаю память в обратном вызове сериализации, у меня есть утечка памяти. Но мой готовый обратный вызов все равно будет вызван. Я не хочу перемещать обратный вызов по выполнению удаления второй части, потому что я ожидаю много данных и не хочу хранить в памяти что-то большее, чем необходимо. Я думаю сделать следующее:
- передать необработанный поток в serializeCb и doneCb.
- В SerialiizeCb удалите необработанный поток и сделайте его пустым.
- В doneCb проверьте, имеет ли необработанный поток значение NULL, если нет, то удалите его.
Это выглядит чисто? или я могу сделать что-то лучше.
void serializeCb(const char * rawStream)
{
// some other code.
delete rawStream;
rawStream = NULL;
}
void doneCb(const char* rawStream)
{
if(rawStream != NULL){
delete rawStream;
}
}