Derived
2つの基本クラスから直接継承するクラスがあり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
その逆も同様です) 。