C ++ Управление проблемами с дескриптором общего объекта - PullRequest
0 голосов
/ 12 марта 2010

Есть ли лучшая практика для управления объектом, совместно используемым двумя или более другими объектами. Даже при работе на другом потоке?

Например, создается A и указатель на него дается B и C. ObjA A = новый ObjA (); B-> GiveObj (А); С-> GiveObj (А);

Теперь, как я могу удалить objA?

До сих пор я думал о том, сколько мониторов у него есть, и когда этот счетчик равен 0, он удаляет это (например, когда передается A, получатель вызывает A-> Aquire (), когда это делается вызовите A-> release ();

Или я мог бы сказать B-> RemoveObj (A); и C-> RemoveObj (A); Проблема в том, что если B или C работают в другом потоке, я не могу удалить A, пока они не закончили с A, и они не увидели вызов RemoveObj. (Которые требуют кучу грязных флагов).

Был бы хороший способ сделать это, возможно, с помощью Signal / Slot?

Спасибо

1 Ответ

2 голосов
/ 12 марта 2010

Лучшим вариантом является использование реализации интеллектуального указателя, например Boost's shared_ptr .

Это позволяет вам обмениваться указателями по мере необходимости, не беспокоясь об удалении.


Edit:

Я только что понял, что вы добавили тег сигнал / слот. Если случайно вы используете Qt, вы, вероятно, захотите QSharedPointer (или аналогичный) вместо реализации указателя повышения.

...