Я использую контроллер ESP-32 и хочу передать std::shared_ptr
, используя очередь FreeRTOS. Однако, при этом теряется один указатель. Вероятно, проблема кроется в этом куске кода:
{ // Начало функции
SoundControl ctrl;
…
ctrl.provider = sound; // +1 указатель (`sound` является константной ссылкой на std::shared_ptr)
…
xQueueSendToBack(queue, &ctrl, portMAX_DELAY); // ±0 указателей
} // Конец функции, -1 указатель
В результате стоящий в очереди указатель не считается, а его деструктор уменьшает счётчик ссылок на один.
Как можно решить эту проблему (продолжив использовать очереди FreeRTOS, если возможно)?
Судя по описанию xQueueSendToBack происходит простое копирование памяти объекта ctrl куда-то в очередь, причем счетчик на shared_ptr не увеличивается. Так делать с shared_ptr нельзя, что там происходит дальше я не знаю, но подозреваю что вы удаляете копию памяти на ctrl и отрабатывается деструктор shared_ptr, который уменьшает счетчик до нуля.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вот ссылка на англойязычную версиюНе могли бы Вы мне помочь, потому что советы на ссылочной версии не помогли: [https://stackoverflow
Подскажите пожалуйстаЕсть файл у меня settings
На вход принимается радиус(целое число)Нужно вычислить сколько точек входит в круг