Сравнение указателя множественного наследования
У меня есть классDerived
который наследует непосредственно от двух базовых классов,Base1
а такжеBase2
, Я хотел бы знать, безопасно ли вообще сравнивать указатели с базовыми классами, чтобы определить, совпадают ли ониDerived
объект:
Base1* p1;
Base2* p2;
/*
* Stuff happens here. p1 and p2 now point to valid objects of either their
* base type or Derived
*/
//assert(p1 == p2); //This is illegal
assert(p1 == static_cast<Base1*>(p2)); //Is this ok?
assert(static_cast<Derived*>(p1) == static_cast<Derived*>(p2)); //How about this?
Указатели гарантированно действительны, но не обязательно указывают наDerived
объект. Я предполагаю, что это, вероятно, хорошо, но я хотел знать, было ли это хорошо с технической точки зрения C ++. Я на самом деле никогда не делаю никаких операций с указателями, я просто хочу знать, указывают ли они на один и тот же объект.
РЕДАКТИРОВАТЬ: Кажется, будет безопасно, если я могу гарантировать, чтоp1
а такжеp2
указать наDerrived
объекты. Я в основном хочу знать, безопасно ли, если они не указывают, если один или оба указывают на базовый объект, сравнение обязательно потерпит неудачу? Опять же, я могу гарантировать, что указатели действительны (т.е.p1
никогда не будет указывать наBase2
объект или наоборот)