c++ - 如何从 Base 析构函数中将 Base* 与 Derived* 列表进行匹配?

标签 c++ pointers casting derived-class rtti

我有两个类,BaseDerived。我有一个存储 Derived* 指针列表的容器。

当 Base 对象被销毁时,有一个信号/槽机制发出信号,此时我们在 ~Base 析构函数中,因此 RTTI 不可用于转换 Base *Derived*(这是使用 Qt,但问题不是 Qt 特定的)

该信号连接到管理指针容器的插槽。你可能已经猜到了,我想检查对象被销毁的 Base* 指针是否对应于存储在容器内的 Derived* 指针,如果是,则删除它从容器中取出。

我知道有很多替代设计,例如不使用QObject::destroyed() 信号,或者存储QObject* 列表而不是派生*。但出于许多实际原因,我想使用那个。

这意味着,我想将基指针转换为派生指针,不是为了解除引用,而是为了取消跟踪指针,并且我希望无论子类树是什么(包括多重继承、虚函数...... .).

我可以为此使用 static_cast 吗?

谢谢!

最佳答案

在评论中,您写道:

comparing the cast pointer to a table Derived* pointers for removing it. Of course I will not dereference the cast pointer.

在这种情况下,根本不需要转换,你可以直接比较你的指针:

Base* base;
Derived* derived;
if(base == derived) {
}

关于c++ - 如何从 Base 析构函数中将 Base* 与 Derived* 列表进行匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37522558/

相关文章:

c++ - 为什么 iterator::end( ) 是非静态成员而不类似于 string::npos?

c++ - 指向对象数组的指针的初始化

c++ - 如何使用指针从不同的函数访问局部变量?

c++ - 如何在 C 预处理器中合并符号名称和符号值

c++ - 为什么 glGetSubroutineIndex 为不同的函数返回相同的值?

c++ - 在 Bazel 中包含 Protobufs

c - 在 C 中将数字作为字符串相加

c++ - 是否可以指定按位操作的返回类型?

java - 为什么 List<String> 不能作为 List<Object> 接受?

c++ - 使用 std::forward 的构造函数