多态类的堆栈

| 亲爱的C ++专业人士。我有问题我有一个程序,其中有1个抽象类base_class和2个派生类:sippeers和dbget。它还有2个线程。第一个线程从用户那里获取命令,第二个线程处理这些命令。这两个派生类代表不同的命令。因此,我必须创建某种类型的堆栈,在该堆栈中,应将第一个线程中的用户命令放入第二个线程中进行处理。为了使所有命令堆叠在一起,我必须使用多态。首先,我尝试使用std :: list。但是第一个问题是:我无法列出抽象类。然后我尝试使用boost :: ptr_list,但是存在第二个问题:在第一个线程中创建的类在过程结束时消失,而创建它们的过程却消失了。因此,指针变为非法。问题:我应该使用哪种实现?看来我必须存储派生类的每个副本。但是哪里?     
已邀请:
std :: queue为“ 0”是将类从一个线程传递到另一个线程而不用担心内存管理的最直接的解决方案。与条件变量结合使用,以表明该队列不为空,因此使用者线程可以等待。 对于多态部分,有一个额外的虚函数(execute()?),因此使用者线程不应该知道它实际接收的是什么类。     
  首先,我尝试使用std :: list。但是第一个问题是:我无法列出抽象类。 但是,您可以创建一个包含指向抽象基类的指针的“ 1”,例如
std::list<base_class *> commands;
  然后我尝试使用boost :: ptr_list,但是存在第二个问题:在第一个线程中创建的类在过程结束时消失,而创建它们的过程却消失了。因此,指针变为非法。 您是说新命令是在第一个线程的堆栈上创建的吗?不要这样做-第一个线程不知道第二个线程何时完成了对命令的处理,因此第一个线程不应该定义它们何时结束。只需让第一个线程使用
new
分配对象即可。 话虽如此,您的用例听起来像是生产者-消费者问题的经典示例。考虑查看有关此内容的Wikipedia页面,以获取有关如何正确实施此类系统的一些启发(很难将其理解为错误)。     

要回复问题请先登录注册