Je regardais comment std::tr1::shared_ptr<>
fournit la capacité de lancer à bool. J'ai pris dans le passé en essayant de créer un pointeur intelligent qui peut être casté bool comme la solution triviale, à savoirComment shared_ptr <> autorise-t-il en toute sécurité le lancement vers bool?
operator bool() {
return m_Ptr!=0;
}
finit généralement par être implicitement coulable au type de pointeur (probablement par la promotion de type), ce qui est généralement indésirable. Les implémentations de boost et de Microsoft semblent utiliser une astuce consistant à lancer un unspecified_bool_type()
. Quelqu'un peut-il expliquer comment ce mécanisme fonctionne et comment il empêche le moulage implicite au type de pointeur sous-jacent?
Toutes les bonnes réponses, merci. Bon d'être en mesure de mettre un nom à elle aussi - n'avait pas rencontré l'idiotisme de la sécurité avant. –