189 похожих чатов

Привет, а подскажите как можно переслать указатель через очередь и

чтобы память автоматически освободилась. Это вообще возможно? Сейчас у меня есть тред в котором я выделяю память (из пула) и передаю указатель, а приемник потом память освобождает. Но я подумал, что наверное можно умные указатели применить и сделать более менее безопасную передачу (освобождение памяти).

5 ответов

9 просмотров

Да, используй unique_ptr, выделяй в конструкторе (можно подсунуть параметром шаблона свой аллокатор), удаляй как захочешь через .release или само удалится в деструкторе. Делитер тоже можно свой подсунуть. Передавать владение, используя move-семантику.

Anton-Glukhov Автор вопроса
Wild_Wind
Да, используй unique_ptr, выделяй в конструкторе (...

auto *data = (char *) new(placement_buf) char (len + 1); memcpy(data, my_raw_data, len); data[len] = '\0'; // post message to the queue postMessage(task_id, T{data, len});

Anton Glukhov
auto *data = (char *) new(placement_buf) char (len...

с авто-удалением ивента будут проблемы. или хендлеры придется выкручивать через одно место, или код будет не понятным. Предлегаю сделать так … FreertosQ <void*> q; typedef struct { int sig; } BaseEvt_t; typedef struct { BaseEvt_t super; std::string msg; } DervedEvt_t; … auto *ptr = malloc(sizeof(DervedEvt_t)); ptr.msg.assign(my_raw_data, len); q.post(ptr); …. while (1) { auto *evt = q.pend(); if (!p) continue; handle(p); delete p; } вообще жуткая смесь С/С++ получилась с утечкой памяти. но надеюсь идея понятна

Anton-Glukhov Автор вопроса
Pavel .
с авто-удалением ивента будут проблемы. или хендле...

так у меня примерно так и сделано. но смысл-то в том что ручной вызов delete, который можно забыть или пропустить (с ранним return)...

Anton Glukhov
так у меня примерно так и сделано. но смысл-то в т...

тогда надо свою очередь делать где объектом будет смарт поинтер, а не сырой указатель как у фриртос

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта