析构函数-复制构造函数-赋值操作符重载-默认构造函数<代码解析>
通过下面primer中的一道习题,可以更深刻的了解,析构函数,复制构造函数,赋值操作符重载,默认构造函数的使用。
但是我的结果与primer习题解答里面的并不相同,可能是编译器不同的原因导致。
// test1107.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <vector> using namespace std; struct Exam{ Exam(){ cout<<"Exam()"<<endl;} //默认构造函数 Exam(const Exam&){ cout<<"Exam(const Exam&)"<<endl;} //复制构造函数 Exam& operator= (const Exam&){ cout<<"Exam& operator"<<endl;return *this;} //赋值操作符 ~Exam(){ cout<<"~Exam()"<<endl;}//析构函数 }; void func1(Exam a){}//形参为 exam的对象 void func2(Exam& b){}//形参为 exam的引用 Exam func3(){Exam obj;return obj;} //返回exam的对象 int main(){ cout<<"--------------------1----------------"<<endl; Exam a; //调用默认的构造函数创建对象a cout<<"--------------------2----------------"<<endl; func1(a);// 调用复制构造函数,创建副本传递实参,撤销副本 cout<<"--------------------3----------------"<<endl; func2(a); //形参为引用,无需传递实参 cout<<"--------------------4----------------"<<endl; a = func3(); //调用默认构造函数创建局部对象, //用复制构造函数返回对象副本 //调用析构函数撤销局部对象 //调用赋值函数赋值 //调用析构函数撤销副本 cout<<"--------------------5----------------"<<endl; Exam *b = new Exam(); //调用默认构造函数创建对象 cout<<"--------------------6----------------"<<endl; vector<Exam> exec(3); //调用默认构造函数创建对象 //调用赋值构造函数将临时对象复制到每个元素 //调用析构函数撤销 //重复三次 cout<<"--------------------7----------------"<<endl; delete b; //调用析构,撤销p cout<<"--------------------8----------------"<<endl; system("pause"); }
执行结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?