C ++ Управление проблемами обработки общего объекта
-
19-09-2019 - |
Вопрос
Существует ли наилучшая практика для управления объектом, общим для 2 или более других объектов.Даже при запуске в другом потоке?
Например, создается A , и указатель на него передается B и C.objA A = новый objA();B->GiveObj(A);C->GiveObj(A);
Теперь, как я могу удалить objA?
Пока что я думал о том, чтобы отслеживать, сколько ссылок на него есть, и когда этот счетчик равен 0, он удаляет это (например, когда A передается, получатель вызывает A-> Aquire(), когда это сделано, он вызывает A-> release();
Или я мог бы сказать B-> RemoveObj(A);и C->RemoveObj(A);Проблема в том, что если B или C запущены в другом потоке, я не могу удалить A, пока они не закончат с A, и они не увидят вызов RemoveObj.(Для чего требуется куча беспорядочных флагов).
Был бы хороший способ сделать это, возможно, с помощью Signal / Slot?
Спасибо
Решение
Лучшим вариантом является использование реализации интеллектуального указателя, такой как shared_ptr бустера.
Это позволяет вам передавать указатели по мере необходимости, не беспокоясь об удалении.
Редактировать:
Я только что понял, что вы добавили тег signal / slot.Если случайно вы используете Qt, вы, вероятно, хотите Qsharedпоинтеръ (или аналогичный) вместо реализации указателя boost.