Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > умные указатели и неочень. operator ==


Автор: varnie 21.7.2008, 18:50
привет всем.

пускай имеется семпл:
Код

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<Foo>. какой из этих 2х вариантов предпочтительнее и правильнее? и почему не предусмотрено неявное сравнение указателей, что-то типа:
Код

if (this != BarPtr->getFoo() ){
    //do smth useful
}

к каким фатальным ошибкам разрешение подобного могло бы привести? спасибо за инфу.

Автор: vinter 21.7.2008, 19:00
Цитата(varnie @  21.7.2008,  19:50 Найти цитируемый пост)
насколько оправдана замена реализации void Foo::f() const на следующую: 

насколько оправдана замена шила на мыло?
Цитата(varnie @  21.7.2008,  19:50 Найти цитируемый пост)
и почему не предусмотрено неявное сравнение указателей, что-то типа:

а зачем?  это будет приводить к ошибкам, это выглядит как сравнение двух просns[ указателей, хотя на деле это не так.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)