C++ 将元素推到向量上时出错

C++ 将元素推到向量上时出错,c++,class,vector,types,C++,Class,Vector,Types,I get a被隐式删除,因为当我要将元素添加到带有container.push_backtmp;的向量时,默认定义将是格式错误的错误,下面的代码是错误的;,为什么会这样? 我的代码: 或者在Coliru上:您不能拥有my\t对象的向量,因为my\t类包含std::mutex: 互斥体。没有复制构造互斥体这样的事情 由于my\t类也没有复制构造函数,因此这会自动删除my\t的复制构造函数 vector的值类必须至少具有。这是因为向量必须能够重新分配其内容,以适应其增长。这意味着向量中的元素必须是

I get a被隐式删除,因为当我要将元素添加到带有container.push_backtmp;的向量时,默认定义将是格式错误的错误,下面的代码是错误的;,为什么会这样? 我的代码:


或者在Coliru上:

您不能拥有my\t对象的向量,因为my\t类包含std::mutex:

互斥体。没有复制构造互斥体这样的事情

由于my\t类也没有复制构造函数,因此这会自动删除my\t的复制构造函数

vector的值类必须至少具有。这是因为向量必须能够重新分配其内容,以适应其增长。这意味着向量中的元素必须是可复制/可分配的

如果为my_t类显式实现了一个复制构造函数和赋值运算符,那么就可以从中生成一个向量。但接下来您需要弄清楚复制构造并分配给my_t类意味着什么

在类保持不变的情况下,您所能做的最多就是拥有指向my_t实例的指针向量。可能使用std::unique_ptr或std::shared_ptr.

在这行中:

container.push_back(tmp);
您尝试复制我的对象。这将调用默认的编译器提供的复制构造函数,但它不可能存在。它不可能存在,因为它会一个接一个地复制所有成员,并且

互斥体是可复制的,这真的没有意义。它们没有,只有当它们与实际值一起存在时才有意义

因此,为my_t创建您自己的复制构造函数,它可以复制它可以复制的所有成员,并且只默认构造其他成员


几乎可以肯定的是,您还希望复制conn成员,并将其设置为a,以确保在对象被破坏时正确删除它。

当您推入容器时,您尝试复制my\t对象。这将调用默认的编译器提供的复制构造函数,但它不可能存在,因为它将复制所有成员,并且。请提取一个。@UlrichEckhardt老实说,我没有尝试编译它,但它看起来会编译并显示问题。它不是严格意义上的最小值,但也不是太大,只有几个额外的函数,它们是一行程序。不是MCVE,它会让你的问题偏离主题。有很好的理由,请按照提供的链接!旁注:有一个*连接;在我的课堂上,我建议你应该留意一下。确保在解决互斥问题后正确复制内容。
 std::mutex bmtx;
 std::mutex amtx;
container.push_back(tmp);