Умные указатели и неочень. operator ==

привет всем.пускай имеется семпл:
class Foo;class Bar{  boost::shared_ptr<Foo> FooPtr;public:  //...  boost::shared_ptr<Foo> getFoo() const{    return FooPtr;  }};class Foo{  boost::shared_ptr<Bar> BarPtr;public:  //...  void f() const{      if (this != (BarPtr->getFoo()).get()){        //do smth useful     }  }};
насколько оправдана замена реализации void Foo::f() const на следующую: 
void Foo::f() const{  if ( this != &*(BarPtr->getFoo()) ){    //do smth useful  }}
? т.е. мне надобно сравнить голый указатель на Foo и сторонний boost::shared_ptr. какой из этих 2х вариантов предпочтительнее и правильнее? и почему не предусмотрено неявное сравнение указателей, что-то типа:
if (this != BarPtr->getFoo() ){    //do smth useful}
к каким фатальным ошибкам разрешение подобного могло бы привести? спасибо за инфу.
1 ответ

насколько оправдана замена реализации void Foo::f() const на следующую: 
насколько оправдана замена шила на мыло?
и почему не предусмотрено неявное сравнение указателей, что-то типа:
а зачем?  это будет приводить к ошибкам, это выглядит как сравнение двух просns[ указателей, хотя на деле это не так.