Вопрос

Существует ли наилучшая практика для управления объектом, общим для 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top