当我将元素推到矢量上时出错
Get error when I push element onto vector
当我想将元素添加到带有container.push_back(tmp);
的向量时,我的代码出现is implicitly deleted because the default definition would be ill-formed
错误,这是为什么? 我的代码:
#include <vector>
#include <mutex>
class A {
public:
A(){}
~A(){}
};
class my_t {
private:
bool busy;
bool alive;
std::mutex bmtx;
std::mutex amtx;
public:
my_t(){std::lock_guard<std::mutex>lock(bmtx);busy=false;}
~my_t(){}
A* conn;
void take(void) {std::lock_guard<std::mutex>lock(bmtx);busy=true; }
void give(void) {std::lock_guard<std::mutex>lock(bmtx);busy=false; }
bool busy_get(void) {return busy;}
void set_online(void){ std::lock_guard<std::mutex>lock(amtx); alive=true; }
void set_OFFLINE(void) {std::lock_guard<std::mutex>lock(amtx); alive=false; }
bool alive_get(void) {return alive;}
};
class app {
private:
std::vector<my_t> container;
public:
app();
~app();
};
app::app() {
my_t tmp;
tmp.conn = new A();
if (tmp.conn)
tmp.set_online();
container.push_back(tmp);
}
int main(void) {}
或在科利鲁:https://coliru.stacked-crooked.com/a/11625c77383df80c
不能有my_t
对象的向量,因为my_t
类包含std::mutex
es:
std::mutex bmtx;
std::mutex amtx;
互斥体具有已删除的复制构造函数。没有复制构造互斥锁这样的事情。
由于您的my_t
类也没有复制构造函数,因此这也会自动删除my_t
的复制构造函数。
std::vector
的值类必须至少有一个复制构造函数和一个赋值运算符。这是因为向量必须能够重新分配其内容,以适应其增长。这意味着向量中的元素必须是可复制/可分配的。
如果为my_t
类显式实现复制构造函数和赋值运算符,则可以从它们创建向量。但是,您需要弄清楚复制构造并分配给my_t
类意味着什么......
对于您的类,您最多可以做的是拥有指向my_t
实例的指针向量。也许使用std::unique_ptr
或std::shared_ptr
.
在这一行中:
container.push_back(tmp);
您尝试复制my_t
对象。这将调用(默认的,编译器提供的(复制构造函数,但这不存在。它不能存在,因为它会一个接一个地复制所有成员,并且std::mutex
有一个delete
d 复制构造函数。
互斥锁是可复制的并没有真正的意义。它们没有值语义,只有当它们与实际值一起存在时,它们才有意义。
因此,请为my_t
创建自己的复制构造函数,它会复制所有可以复制的成员,并默认构造其他成员。
您几乎肯定还希望深度复制conn
成员,并使其成为std::unique_ptr<A>
,以确保在对象被破坏时正确delete
。
- 当我将元素推到矢量上时出错
- 从斐波那契序列 c++ 中的数组中查找正确的元素时出错
- 通过具有矢量基址的指针读取矢量元素时出错
- 从源文件获取 ui 元素时出错
- SIGABRT(信号6)在使用分治法查找阵列中的多数元素时出错
- 将元素添加到矢量时出错
- 打印 Map 的元素值时出错
- 在数组C++中查找最高/最低元素时出错
- 尝试从矢量获取unique_ptr元素后出错
- 在数组中存储元素时出错
- 分割 使用指针访问 obj 向量中的第二个元素时出错
- 在同一 unix 套接字连接中读取元素两次时出错
- 从矢量 c++ 添加 int 元素时出错
- 将数组用作数组元素时出错
- 为什么这个升压变换操作会使第二个元素出错
- c++ NetBeans在获取指针子向量中元素的字符串值时出错
- 给struct数组中的元素赋值时出错
- findnonzero() 中存储向量<Point>中非零元素的坐标时出错
- 访问c++多集元素时出错
- 访问std::pair数组元素时出错