大一学生的学习笔记:c++ 特殊构造方式

本文主要探讨了C++中的拷贝构造函数,包括其定义、调用时机以及深拷贝和浅拷贝的区别。拷贝构造函数在创建或初始化对象时被调用,尤其在函数参数传递和返回值中扮演重要角色。文章详细阐述了浅拷贝可能导致的问题,强调了深拷贝在处理指向堆区的指针时的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拷贝构造函数

重点:调用时机
难点:深拷贝和浅拷贝

初步了解

什么是拷贝构造函数

  • c++独有
  • 用于:用一个对象去构造或初始化另一个对象
  • 特点:第一个参数必须是当前类的对象的引用
  • 没有写拷贝构造,系统提供
  • 用’=’

定义拷贝构造函数

调用时机

  1. 用一个对象初始化另一对象
    创建对象的同时,使用另一个同类对象初始化Mark obj_2=obj_1;(创建对象且初始化–隐式调用)
  2. 用一个对象直接构造另一对象
    直接通过一个现有的对象,创建新的对象,并且有其他参数Mark obj_2(obj_1,1,2);(函数传参调用–显式调用)
  3. 类的函数作函数参数(只有对象才会调用拷贝构造函数)
//定义一个普通的全局函数,参数表中有类的对象
void fun(Mark obj)
{
	cout <<"fun is been used"<<endl;
}
	fun(obj_1);
  1. 函数返回值是类的对象
Mark fun2()
{
	Mark obj;
	return obj;//将obj拷贝构造出去
}
	fun2();
	Mark obj_1=fun2();//将fun2的返回值拷贝构造给obj_1,并析构。
	Mark obj_2;
	obj_2=fun2();

深拷贝与浅拷贝

浅拷贝

在拷贝函数中,将对应属性一一赋值的操作
指针 堆区指针 指向堆区同一地址
"无脑抄袭”

深拷贝

普通数据一一赋值
对于指针重新分配内存
“致敬经典”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yichenzero89

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值