拷贝构造函数应用场景
来源:互联网 发布:微软推出的人工智能 编辑:程序博客网 时间:2024/05/01 03:39
拷贝构造函数应用场景有四种
#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Vertify{public: Vertify() { cout << "无参构造函数 " << "构造的对象地址是:" << this << endl; } Vertify(int size) { cout << "有参构造函数 " << "构造的对象地址是:" << this << endl; this->size_ = size; } Vertify(const Vertify & obj) { cout << "拷贝构造函数 " <<"构造的对象地址是:" << this<<endl; this->size_ = obj.size_; } void operator= (Vertify & obj) { this->size_ = obj.size_; cout << "=运算符重载 " << "被赋值的对象地址是:" << this << endl; } ~Vertify() { cout << "析构函数 " <<"释放的对象地址是:"<<this<< endl; size_ = 0; }public: int size_;};void Test(Vertify ver)//调用形参的拷贝构造函数{ cout << ver.size_ << endl;}Vertify Fun(){ //C++编译器会生成一个匿名对象,匿名对象=v(调用拷贝构造函数),并将其返回出去 Vertify v(10);//调用一次有参构造函数 return v;//调用一次拷贝构造函数,匿名对象=v,调用一次析构函数,释放v的内存}//场景1void Situation1(){ Vertify v1(11); Vertify v2 = v1;//定义并初始化,调用拷贝构造函数}//场景2void Situation2(){ Vertify v1(22); Vertify v2(v1);//定义并初始化 ,调用拷贝构造函数 }//场景3void Situation3(){ Vertify v1(33); Test(v1);}//场景4void Situation4(){ Vertify v(44);//调用一次构造函数 v = Fun();//调用=运算符重载函数 }//调用两次析构函数,先释放的是Fun返回的匿名对象,再释放v的内存空间//对场景4的优化void Situation5(){ Vertify v = Fun(); cout << "这里没有调用拷贝构造函数,而是直接将匿名对象提升为v对象----现代c++编译器进行的优化,提高了性能" << endl;}int main(){ Situation1(); Situation2(); Situation3(); Situation4(); Situation5(); cin.get(); return 0;}
注:观看对象地址了解对象的构造及析构顺序
//场景1打印结果如下
//场景2打印结果如下
//场景3打印结果如下
//场景4打印结果如下
//场景5打印结果如下
总结:场景4与5区别本质是编译器对匿名对象的处理:
1.=操作时,调用类的=运算符重载函数。
2.初始化操作时,编译器会做优化,不再调用类的拷贝构造函数,大大提高效率。
0 0
- 拷贝构造函数应用场景
- 拷贝构造函数应用场景分析
- 拷贝构造函数应用
- 拷贝构造函数应用分析
- c++学习笔记(二):c++拷贝构造函数应用的四种场景
- C++复制构造函数应用场景
- 拷贝构造函数的三种应用
- 拷贝构造函数、浅拷贝/深拷贝构造函数的应用
- C++构造函数、拷贝构造函数 和 类组合构造函数调用的应用
- 构造函数、拷贝构造函数
- 拷贝构造函数,构造函数
- 拷贝构造函数--默认拷贝构造函数
- (C/C++学习笔记)Copy构造函数应用场景
- copy构造函数的4个应用场景
- 应用拷贝构造函数的三种情况
- C++中拷贝构造函数的应用详解
- 构造、拷贝构造函数基础
- 拷贝构造函数 深拷贝 浅拷贝
- CentOS6.5 2.6.32-431 安装Docker1.8.1
- 使用命令wsimport构建WebService客户端
- 我很喜欢电影背后这个看上去很精神分裂的故事,跟影片中那个盘根错节的故事相得益彰。好的艺术作品永远都不可能被简化成纬度单一的说教。
- 数据挖掘有哪些算法
- Algorithms - Week 2-0 Stacks and Queues
- 拷贝构造函数应用场景
- 使用iptables配置linux服务器请求转发
- Github上README.md介绍
- hdu5384-多校 ac自动机
- CSU 1672 Pool in minecraft
- 557 - Burger(递推)
- Objective-C类,NSUrl介绍和使用
- 小胖说事38----tableview:ios7 分割线短 15 像素(废弃) ios8方法如何将分割线还原
- android:ellipsize属性的含义