亲爱的 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/