c++ - 多态类堆栈

标签 c++ arrays polymorphism derived

亲爱的 C++ 专业人士。我遇到了问题。我有一个程序,它有 1 个抽象类 base_class 和 2 个派生类:sippeers 和 dbget。它也有 2 个线程。第一个线程从用户那里获取命令,第二个线程处理这些命令。两个派生类代表不同的命令。因此,我必须创建某种堆栈,我应该将来自第一个线程的用户命令放入其中,然后将它们放入第二个线程中进行处理。要为所有命令创建一个堆栈,我必须使用多态性。首先,我尝试使用 std::list。但是有第一个问题:我无法列出抽象类。然后我尝试使用 boost::ptr_list,但存在第二个问题:在第一个线程中创建的类在创建它们的过程结束时消失。所以指针变得非法。问题:我应该使用什么样的实现?看起来我必须存储派生类的每个拷贝。但是在哪里呢?

最佳答案

shared_ptr<base_class> 的 std::queue是将类从一个线程传递到另一个线程而无需担心内存管理的最直接的解决方案。结合条件变量来发出队列不为空的信号,以便消费者线程可以等待。

对于多态性部分,有一个额外的虚函数(execute()?),所以消费者线程不应该知道它实际接收的是什么类。

关于c++ - 多态类堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632101/

上一篇:C++选择问题

下一篇:c++ - 合并排序链表

相关文章:

c++ - 将指针转换为 long

c++ - 计算某个数在一定区间内的位数

C++ 快速读取较大文件的最佳方法

c++ - 在 C++ 中,我们将非成员函数放在哪个文件中?

php - 随机数组没有给出所需的结果 php (laravel 5.3)

c# - 使用 C# .net 检查字符串是否包含数组值之一

javascript - 在数组reduce中显式传递初始值作为未定义

Protocol Buffer 中的多态性 3

java - 多态调用取决于变量

c++ - 为什么编译器会提示我的 dynamic_cast?