2017-08-24 9 views
0

Compte tenu de l'destructor ci-dessous:pointeur intelligent Destructeur Race Condition

~shared_ptr(){ 
    *_ref_count--; 
    if(*_ref_count==0){ 
     delete _p; 
     delete _ref_count; 
    } 
} 

Si

_ref_count == 2

peut deux fils libérant la cause intelligente de pointeur sur un double suppression (crash) et/ou pas de suppression du tout (fuite de mémoire) et comment?

+2

Est-ce votre code ou un extrait d'une bibliothèque standard C++? – pm100

+0

Quel est le type de '_ref_count'? Est-ce 'atomic'? –

+0

@ pm100 no. C'est juste une mise en œuvre naïve. – user8512572

Répondre

0

réponse simple

Oui, il y a une condition de course. Deux threads peuvent décrémenter et tester en même temps.

Enquêter std :: atomique ou envelopper dans un mutex ou utiliser std :: shared_ptr (la meilleure réponse)

+0

Ceci est juste une question théorique. – user8512572

+1

c'est juste une réponse théorique – pm100