Szukałem, w jaki sposób std::tr1::shared_ptr<>
zapewnia zdolność do rzucania do bool. Muszę złapać w przeszłości, kiedy próbuje stworzyć inteligentne wskaźnik, który może być lanego do bool jako rozwiązanie trywialne, tjW jaki sposób shared_ptr <> bezpiecznie zezwalają na casting do bool?
operator bool() {
return m_Ptr!=0;
}
zwykle kończy się niejawnie rzutować na typ wskaźnika (przypuszczalnie przez typ promocji), co jest ogólnie niepożądane. Zarówno implementacja boost, jak i Microsoft wydają się wykorzystywać sztuczkę polegającą na rzutowaniu na unspecified_bool_type()
. Czy ktoś może wyjaśnić, jak działa ten mechanizm i jak zapobiega niejawnemu rzutowaniu na typ wskaźnika bazowego?
Wszystkie świetne odpowiedzi, dzięki. Dobrze być w stanie nadać mu nazwę - wcześniej nie natknąłem się na bezpieczny kod. –