当前位置: 首页 > news >正文

c++取经之路(其五)——类和对象拷贝构造函数

概念:拷贝构造函数,只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。

特征:


1. 拷贝构造函数是构造函数的一个重载形式

如:


2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。

造成原因(自己画的图):


3. 若未显式定义,编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

我们来看这个代码:

class Stack 
{
public:Stack(int x=4);//Stack(const Stack& st);void StackPush(int x);~Stack();
private:int* _a;int _top;int _capacity;
};Stack::Stack(int x)
{_a=(int*)malloc(sizeof(int) * x);_top = 0;_capacity = 4;
}void Stack::StackPush(int x)
{_a[_top++] = x;
}Stack::~Stack()
{free(_a);_a = nullptr;_top = 0;_capacity = 0;
}int main(){Stack st1;st1.StackPush(1);Stack st2 = st1;return 0;}

如果我们没定义这个函数,编译器自动生成的会完成浅拷贝。

注意:1.他们指针指向的地址都相同,这肯定是不行的,毕竟析构函数会free两次相同的空间。

2.所以我们就需要自己完成一个深拷贝,在这就不去实现了。

http://www.lryc.cn/news/337158.html

相关文章:

  • YOLOv8最新改进系列:融合最新顶会提出的HCANet网络中卷积和注意力融合模块(CAFM),有效提升小目标检测性能,大幅度拉升目标检测效果!遥遥领先!
  • 【计算机毕业设计】网上宠物商店管理系统——后附源码
  • 详解Qt添加外部库
  • 深入理解JVM垃圾收集器
  • macU盘在电脑上读不出来 u盘mac读不出来怎么办 macu盘不能写入 Tuxera NTFS for Mac免费下载
  • 448.找到所有数组中消失的数字(原地修改)
  • Redis学习从入门到掌握(基础篇)
  • redis主从复制、哨兵
  • uniapp登录拦截白名单使用
  • 力扣45. 跳跃游戏 II
  • MXNet安装:专业指南与深度解析
  • C++函数模板案例--数组封装
  • 传统文字检测方法+代码实现
  • Jmeter从数据为查找结果集数据方法随笔
  • Objective-C网络请求开发的高效实现方法与技巧
  • Java:OOP之术语或概念
  • 内存地产风云录:malloc、free、calloc、realloc演绎动态内存世界的楼盘开发与交易大戏
  • 个人博客项目笔记_05
  • 基础知识点全覆盖(1)
  • 异常处理java
  • 个人博客项目_09
  • 【2024年MathorCup数模竞赛】C题赛题与解题思路
  • 蓝桥杯省赛冲刺(3)广度优先搜索
  • 网页内容生成图片,这18般武艺你会几种呢?
  • pytest的时候输出一个F后面跟很多绿色的点解读
  • 算法打卡day33
  • 《疯狂java讲义》Java AWT图形化编程中文显示
  • Python3 标准库,API文档链接
  • 【Web】CTFSHOW-ThinkPHP5-6反序列化刷题记录(全)
  • AR智能眼镜方案_MTK平台安卓主板芯片|光学解决方案