Сравнение указателя множественного наследования

У меня есть класс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 объект или наоборот)

Ответы на вопрос(7)

Ваш ответ на вопрос