我有一个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对象,反之亦然)