C++ 中类的拷贝、赋值、销毁的实例详解

本篇文章我们一共讲解一下几个知识点:
类的拷贝构造函数。
类的拷贝赋值运算符。
类的析构。
好了one by one
如果我们没有定义类的拷贝构造函数的话,那么编译器会为我们合成默认拷贝构造函数----合成拷贝构造函数。
和成拷贝构造函数的操作是将其参数的各个成员拷贝到正在创建的对象中去,每个成员的类型决定了他是如何被拷贝的:对类类型的成员,会使用其拷贝构造函数,内置类型的成员则是直接拷贝,虽然我们不能直接拷贝一个数组,但是合成拷贝构造函数会逐个的拷贝一个数组类型的成员。
下面我们用代码演示一下合成拷贝构造函数的功能:
#include <iostream>
using namespace std;
/*
代码模仿合成拷贝构造函数的功能
*/
class Sales_data
{
public:
Sales_data();
//我们只是为了读者更好的理解还原了一下合成拷贝构造函数所实现的功能,实际上我们是看不见的
Sales_data(const Sales_data& s);
~Sales_data();
private:
string bookNo;
int units_sold = 0;
double revenue = 0.0;
};
Sales_data::Sales_data()
{
}
Sales_data::Sales_data(const Sales_data& s) :
bookNo(s.bookNo), units_sold(s.units_sold), revenue(s.revenue){
}
Sales_data::~Sales_data()
{
}
好了,我们定义拷贝构造函数也是如此定义的,我解释一下为什么参数表里面是一个静态的引用:
1)我们不想改变该引用的值,只是用来进行拷贝。
2)我们必须声明为引用,如果写成类的话,则又会调用该类的拷贝构造函数,在那个拷贝构造函数中又会调用拷贝构造函数,这样陷入死循环。
我们在来学习一下拷贝赋值运算符:
和拷贝构造函数一样,如果我们不定义拷贝赋值运算符的话,编译器将会为我们合成一个,我们下面用代码来模仿一下吧:
#include <iostream>
using namespace std;
/*
代码模仿拷贝赋值运算符
*/
class Sales_data
{
public:
Sales_data();
//拷贝赋值运算符的默认合成
Sales_data& operator = (const Sales_data & s);
~Sales_data();
private:
string bookNo;
int units_sold = 0;
double revenue = 0.0;
};
Sales_data::Sales_data()
{
}
Sales_data& Sales_data::operator = (const Sales_data & s) { //为什么我们的返回值一定是引用类型呢?这是因为我们可以进行链式编程而做的:s1 = s2 =s3;
bookNo = s.bookNo;
units_sold = s.units_sold;
revenue = s.revenue;
return *this;
}
Sales_data::~Sales_data()
{
}
好了,我们定义拷贝赋值运算符也是如此,我们就不一一赘述了。
我来在来谈一谈;类的构造函数初始化和类的析构函数销毁过程的一些细节性问题。
1比如我们定义了一个构造函数,实际上在参数化赋值列表处及大括号之前,才是我们真正进行初始化的地方,在大括号之中做的操作只是进行了拷贝赋值操作。
这一点我们要清楚的认识到,要不然在对const对象进行初始化是就有问题了,因为const对象只能初始化。
2比如我们定义了一个析构函数,注意了,我们在() {之间的部分才是做了真正的类成员变量的析构操作,{}里面使我们进行的自定义操作,不一定是什么析构,应为析构基本已经完成了。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 中类的拷贝、赋值、销毁
# 中类拷贝与赋值
# c++中深浅拷贝以及写时拷贝的实现示例代码
# 深入理解C/C++中的写时拷贝
# 详解C++中构造函数
# 拷贝构造函数和赋值函数的区别和实现
# 详解C++中String类模拟实现以及深拷贝浅拷贝
# 详解C++ 编写String 的构造函数、拷贝构造函数、析构函数和赋值函数
# C/C++ 浅拷贝和深拷贝的实例详解
# C++基础教程之指针拷贝详解
# C++写时拷贝实现原理及实例解析
# 运算符
# 好了
# 才是
# 链式
# 是一个
# 几个
# 他是
# 将会
# 就有
# 如有
# 则是
# 我来
# 将其
# 我们可以
# 希望能
# 自定义
# 使我
# 认识到
# 在对
# 又会
相关文章:
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何在万网ECS上快速搭建专属网站?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
济南专业网站制作公司,济南信息工程学校怎么样?
如何选择建站程序?包含哪些必备功能与类型?
建站VPS配置与SEO优化指南:关键词排名提升策略
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
如何制作算命网站,怎么注册算命网站?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何在IIS中新建站点并配置端口与IP地址?
表情包在线制作网站免费,表情包怎么弄?
建站之星微信建站一键生成小程序+多端营销系统
广州建站公司哪家好?十大优质服务商推荐
香港服务器租用费用高吗?如何避免常见误区?
如何在企业微信快速生成手机电脑官网?
海南网站制作公司有哪些,海口网是哪家的?
如何在自有机房高效搭建专业网站?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
C#如何使用XPathNavigator高效查询XML
建站上市公司网站建设方案与SEO优化服务定制指南
子杰智能建站系统|零代码开发与AI生成SEO优化指南
C++中引用和指针有什么区别?(代码说明)
如何通过服务器快速搭建网站?完整步骤解析
制作企业网站建设方案,怎样建设一个公司网站?
成都网站制作报价公司,成都工业用气开户费用?
宝塔面板如何快速创建新站点?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
清除minerd进程的简单方法
建站之星如何实现网站加密操作?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何通过网站建站时间优化SEO与用户体验?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何选择PHP开源工具快速搭建网站?
宝塔面板创建网站无法访问?如何快速排查修复?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
黑客如何利用漏洞与弱口令入侵网站服务器?
青岛网站建设如何选择本地服务器?
浅析上传头像示例及其注意事项
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
常州自助建站工具推荐:低成本搭建与模板选择技巧
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
建站主机与虚拟主机有何区别?如何选择最优方案?
如何在云服务器上快速搭建个人网站?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站之星2.7模板快速切换与批量管理功能操作指南
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
建站之星Pro快速搭建教程:模板选择与功能配置指南
*请认真填写需求信息,我们会在24小时内与您取得联系。