Модуль, над которым я работаю, состоит из пары потоков (аналогично производителю / потребителю), обмен сообщениями между ними осуществляется путем отправки адреса созданного объекта с помощью функции отправки boost :: message_queue.
До настоящего времени управление памятью осуществлялось в явном виде путем создания экземпляра объекта в потоке производителя и удаления его в потоке потребителя после его использования.
Теперь я планирую удалить это явное управление с помощью самоуправляемой памяти (интеллектуальный указатель / boost shared_ptr) по понятным причинам (управление сложностью и предотвращение утечек).
Единственная проблема, с которой я сталкиваюсь, заключается в том, что api boost / message_queue использует в своей подписи необработанный указатель, и я хочу, чтобы память распределялась между потоками. Итак, как мне управлять подсчетом ссылок, чтобы объект сообщения не разрушался сразу же после завершения области действия функции потока производителя, но даже до того, как поток потребителя завершил свою задачу?
Один из способов - сериализовать shared_ptr и использовать его для передачи между потоками.
Есть ли более очевидный способ, который я пропускаю? Было бы здорово, если бы я мог найти больше альтернатив здесь. Заранее спасибо.