首页 > 其他分享 >结构体中的指针&&拷贝赋值构造函数改造

结构体中的指针&&拷贝赋值构造函数改造

时间:2024-05-18 18:09:12浏览次数:19  
标签:构造函数 体中 struct && 拷贝 指针 ptr size

带有成员指针的结构体的拷贝


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

相关文章

  • Windows Server 2025 简体中文版下载 (Inside Preview, updated May 2024) - 下一代 W
    WindowsServer2025简体中文版下载(InsidePreview,updatedMay2024)-下一代Windows11ServerWindowsServer2025正式版发布在即请访问原文链接:WindowsServer2025简体中文版下载(InsidePreview,updatedMay2024)-下一代Windows11Server,查看最新版。原创......
  • 构造函数的成员初始化列表
    为什么要初始化成员对于类成员是基础数据类型,例如int、char这些,构造对象时,成员不会被初始化,值是随机的。下面代码可以验证下:classA{public:A(){}voidshowMember()const{std::cout<<"a:"<<a<<std::endl;}private:inta;};int......
  • js的函数及无参与有参构造函数
    1.函数定义fuctionfn(str){//1.定义函数alert(str);}fn("测试方法");varfn1=function(str){//2.定义函数alert(str);}varfn2=fuction(f,str){f(str);}fn2(fn1,"方法作为参数");//函数可以作为方法传递参数2.无参构造:varperson=function(){alert("......
  • 解决 java 实体中用 LocalDateTime 在转换时候报错 Error attempting to get column
    java中的实体类用到了LocalDateTime类型。在转换时候报错Errorattemptingtogetcolumn‘XXX’fromresultset.Cause:java.sql.解决方法最为简单。是因为com.alibaba的版本问题。切换版本号到1.1.22即可消除问题<dependency><groupId>com.alibaba</gro......
  • C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
    C++构造函数构造函数是C++中一种特殊的成员函数,当创建类对象时自动调用。它用于初始化对象的状态,例如为属性分配初始值。构造函数与类同名,且没有返回值类型。构造函数类型C++支持多种类型的构造函数,用于满足不同的初始化需求:默认构造函数:不带参数的构造函数,通常用于初......
  • Windows 7 & Windows Server 2008 R2 简体中文版下载 (updated Apr 2024)
    Windows7&WindowsServer2008R2简体中文版下载(updatedApr2024)Windows7&WindowsServer2008R2(2024年4月更新)请访问原文链接:Windows7&WindowsServer2008R2简体中文版下载(updatedApr2024),查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......
  • 默认构造函数学习
    转自:https://blog.csdn.net/sevenjoin/article/details/88314531,讲的很好。1.介绍若针对一个类没有显式地定义构造函数,那么编译器会隐式的为这个类生成一个默认构造成员函数。 默认构造函数就是在调用时不需要显示地传入实参的构造函数。假如用户定义了其他构造函数(比如有参数......
  • winform之在主窗体中不显示子窗体的菜单栏
    在MDi窗体嵌入子窗体后不显示菜单栏背景:由于之前做的一个程序的功能全部都是放在一个界面上的,有一个功能能够在数据库查询数据,并返回到界面上,数据量比较小的时候还好,但是数据量多了,导致它阻塞的其他线程,经过一系列讨论之后,决定将一个界面换成一个主界面加多个子界面。实施:多个......
  • 构造函数与析构函数
    构造函数可以有多个,可以重载复制构造函数只有一个参数,即对同类对象的引用没有定义会生成默认复制构造函数Complex(constComplex&c){ real=c.real; imag=c.imag;}三种使用情况用对象去初始化同类的另一个对象Complexc2(c1);函数有一个参数是类A是的对象时......
  • 深入分析C++对象模型之移动构造函数
    接下来我将持续更新“深度解读《深度探索C++对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。C++11新标准中最重要的特性之一就是引入了支持对象移动的能力,为了支持移动的操作,新标准引入了一种新的引用类型——右值引用,右值引用一......