2010-03-12 15 views
0

Existe-t-il une meilleure pratique pour gérer un objet partagé par 2 autres objets ou plus. Même en cours d'exécution sur un fil différent?C++ Gestion des problèmes Handle de l'objet partagé

Pour l'exemple A est créé et un pointeur est donné à B et C. ObjA A = new ObjA(); B-> GiveObj (A); C-> GiveObj (A);

Maintenant, comment puis-je supprimer objA? Jusqu'à présent, ce que je pensais est un moniteur combien il y a de ref et quand ce compteur est 0 il supprime ceci (comme quand A est passé, le récepteur appelle A-> Aquire(), quand c'est fini appelez A-> release();

Ou je pourrais dire B-> RemoveObj (A), et C-> RemoveObj (A); Le problème avec ceci est si B ou C fonctionnent sur un thread différent, Je ne peux pas supprimer A jusqu'à ce qu'ils aient fini avec A, et ils ont vu l'appel de RemoveObj. (Qui exigent un tas de drapeaux désordonnés)

Y aurait-il une bonne manière de faire ceci, probablement avec Signal/Slot?

Merci

Répondre

2

La meilleure option consiste à utiliser une implémentation de pointeur intelligent, telle que Boost's shared_ptr.

Cela vous permet de contourner les pointeurs au besoin, sans vous soucier de la suppression.


Edit:

Je viens de réaliser que vous aviez la balise signal/fente ajouté. Si par hasard vous utilisez Qt, vous voulez probablement QSharedPointer (ou similaire) au lieu d'une implémentation de pointeur d'accentuation.