带有成员指针的结构体的拷贝
1.问题
使用结构体时,在析构时发生了**重复释放指针** 的错误。
2.原因
定义了QList<结构体>,使用append添加结构体对象并未此结构体中的指针分配了空间,append会执行值拷贝,此时会创建新的副本添加进QList中,值得注意的是:append执行拷贝时并不会分配地址,而是把副本中的指针指向原值指向的地址,因此在脱离变量析构时,原值中指针已被释放,副值再次释放时便会造成二次释放的错误。
3.解决方法
已经定位到原因是拷贝构造副值时,并不会为副值中的指针分配地址,故解决方法就是改造拷贝构造函数。
struct struct_A{
char* ptr_ = nullptr;
int size = 0;
//拷贝构造
struct_A(struct_A& it){
//拷贝指针长度
this->size = it.size;
//分配空间
this->ptr_ = (char*)malloc(this->size);
//拷贝指针数据
*this->ptr_ = *it.ptr_;
}
}
标签:构造函数,体中,struct,&&,拷贝,指针,ptr,size
From: https://www.cnblogs.com/lvshen/p/18199591