从对超类的引用确定对象标识

Bjö*_*lex 1 c++

我有以下一对功能:

void RegisterSink( ISink & Sink )
void UnregisterSink( ISink & Sink )
Run Code Online (Sandbox Code Playgroud)

ISink是一个抽象基类.在内部,我想在std :: set中存储指向接收器的指针.当一个接收器未注册时,我只需在我的集合中搜索指针,然后将其删除.我的问题是,有没有办法,采用参数Sink的地址会产生不同的结果,尽管同一个对象作为参数传递.我知道,在某些多继承szenarios中进行转换时,指针可能会发生变化,但这种情况又如何呢?

提前致谢!

Kon*_*lph 8

正如您所说,在具有多重继承的虚拟类之间进行转换时,指针地址可能会发生变化.但是,在您的情况下,静态类型始终是相同的:ISink因此,比较此静态类型的两个点是安全的,并产生可重现的结果.