我正在用C ++编写一个程序,我希望包含vector
类型Hilo
- &gt; vector<Hilo>
,(Hilo
是一个包含boost :: thread的类,它修改hilo的属性本身..)。当文件中创建向量时出现错误:{{{{{{{{{ 1}}。向量的创建有什么问题?我试过用这些方法创建它:
1.
agregarHilo
或2.(正如我之前所说,矢量是在Operaciones.cpp的方法 Hilo * hil = new Hilo(this->contadorHilos,tiempo_vida);
vecHilos.push_back(hil);
中创建的..这是完整的代码)谢谢。
agregarHilo
答案 0 :(得分:0)
我相信你的问题在于vecHilos.push_back(Hilo(this->contadorHilos,tiempo_vida));
行。在这一行中,您将创建一个新的const Hilo
对象,然后将其复制到vecHilos
的后面。
您的大部分课程都可以毫不费力地复制,但boost::thread
不可复制:
boost :: thread类负责启动和管理 线程。每个boost :: thread对象代表一个单独的线程 执行,或非线程,最多一个boost :: thread对象 表示给定的执行线程:boost :: thread类型的对象 是不可复制的。
您应该能够通过从代码中删除boost::thread
的所有实例来验证此行为,然后应该编译正常(除非有其他错误)。
在这种情况下,您需要为Hilo
编写自己的副本(或移动)构造函数,并处理线程的复制/移动。例如(未经测试,可能不是最佳解决方案):
// Move constructor
Hilo::Hilo(Hilo&& old)
: id(_hilo.id), mensaje(_hilo.mensaje), tiempo_vida(_hilo.tiempo_vida),
hilo(std::move(_hilo.hilo)) {}