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

深拷贝函数

ps:
什么时候调用拷贝构造函数
1.调用函数时,实参是对象,形参不是引用类型
如果函数的形参是引用类型,就不会调用拷贝构造函数
2.函数的返回类型是类,而且不是引用类型
3.对象数组的初始化列表中,使用对象。

1.深拷贝函数本质是在类中写一个指针
2.在对应的函数实现中创建相关的内存
4.根据不同情况赋值
5.最后在析构函数中delete

6.-----------------------------------》返回引用的例子

Human& Human::Compare(Human& other) {
if (other.compare > this->compare) {
return other;
}
else
{
return *this;//解指针
}

}

int main() {
string addr = "adw";
Human a("ad", "da", "sd", "ad", &addr);

string addr2 = "adwasdas";
Human b("ad", "da", "sd", "ad", &addr2);a.compare = 10;
b.compare = 20;Human& bie_ming = a.Compare(b);//相当于用别名来接受给的对象
cout << &a << endl;
cout << &b << endl;
cout << "结果" << endl;
cout << &bie_ming << endl;

}


1.拷贝构造函数
// 假设 Human 类有这样的成员变量:
class Human {
private:
string* addr; // 动态分配的字符串
string name; // 普通字符串对象
int age; // 基本类型

public:
// 拷贝构造函数
Human(const Human& other) {
name = other.name; // string 的拷贝赋值,安全的
age = other.age; // 基本类型的拷贝

    // 对指针成员进行深拷贝if (other.addr != nullptr) {addr = new string(*(other.addr));} else {addr = nullptr;}
}

};

2.赋值深拷贝:
Human& Human::operator=(Human& other)//此函数一定要有参数
{
// 1. 检查自赋值
if (this == &other) {
return *this;
}

// 2. 复制非指针成员
Name = other.Name;
Career = other.Career;
Lifetime = other.Lifetime;
Talent = other.Talent;// 3. 处理指针成员(深拷贝的关键步骤)
// 先删除原来的内存
if (Addr != nullptr) {delete Addr;
}// 分配新内存并复制数据
if (other.Addr != nullptr) {Addr = new string(*(other.Addr));  // 深拷贝
}
else {Addr = nullptr;
}cout << "赋值运算符调用(深拷贝): " << Name << endl;

return *this;//这是链试处理方式可以更好的连续等于,-------------》》一般来说引用的函数是返回引用,用引用接的
}

http://www.jsqmd.com/news/183692/

相关文章:

  • ESP32 + MicroPython 简易 Web 服务器教程
  • 1、A+B 输入输出练习I
  • 颠覆性7款AI论文神器!20分钟万字问卷,真实参考文献一键搞定!
  • 2025模温机品牌实力榜:防爆非标定制与高精度控温企业盘点
  • 使用 Docker 搭建 EMQX,并通过 MicroPython 实现 MQTT 控制 ESP32 LED
  • 别再瞎调提示词!提示工程架构师揭秘机器学习模型适配的5大黄金原则
  • 计算机深度学习毕设实战-基于深度学习+机器学习的肝病患者智能诊断及系统实现
  • 2026模温机挑选指南:2025年热销榜
  • SQLite 触发器
  • 详细介绍:OpenAI 拉响红色警报,以突击式提升 ChatGPT
  • XML SimpleXML 简介
  • 【音视频】MP4 文件结构详细解析
  • 2025年度总结之-如何构建 2025 专属的 GitHub AI 项目情报库
  • 2025模温机技术分析:控温范围广、精度高企业上榜
  • Python3 与 VSCode:高效开发环境的选择
  • 计算机深度学习毕设实战-基于ISIC数据集的人工智能 皮肤病黑色素瘤分类研究与实现
  • 第七十四天
  • 第七十五天
  • 【毕业设计】基于深度学习双分支残差结构的低光照图像增强研究与应用实现
  • GitHub 热榜项目 - 日榜(2026-1-2)
  • 吐血推荐9个AI论文写作软件,继续教育学生轻松搞定毕业论文!
  • 【课程设计/毕业设计】基于 人工智能双分支残差结构的低光照图像增强研究与应用实现
  • 【音视频】HLS 协议详细解析
  • 【高并发系统必备技能】:ZGC停顿时间实时监控与预警机制设计
  • 窗口
  • HTTPS真的安全吗?—— 使用 mitmproxy 中间人攻击破解 GitHub 登录会话
  • 喵喵喵 XIX
  • 【音视频】将数据包的时间戳从输入流时间基转换为输出流时间基的目的
  • 为什么建议程序员尽早拥抱 Markdown?
  • 计算机深度学习毕设实战-基于 人工智能+双分支残差结构的低光照图像增强研究与应用实现