C++学习——copy构造函数所涉及匿名对象的问题
来源:互联网 发布:fanuc编程软件 编辑:程序博客网 时间:2024/06/18 02:39
当一个函数返回值是一个对象时,返回的是一个匿名对象(所以会调用copy构造函数)。
这个匿名对象在何时被创建,何时被析构需要弄清楚。
#include <iostream>using namespace std;class copyStruct{ int a; int b;public: copyStruct(){} copyStruct(int _a, int _b){ a = _a; b = _b; } //copy构造函数,形参的实行必须是const Type& name copyStruct(const copyStruct &cs){ a = cs.a; b = cs.b; } ~copyStruct() { cout<<"析构函数被调用"<<endl; } void printCS(){ cout<<a<<"——————————"<<b<<endl; }};//函数返回值是一个元素(复杂类型的),返回的是一个匿名对象(所以会调用copy构造函数)//匿名对象的去和留:copyStruct gg(){ copyStruct cs(1, 2); return cs;}void objpaly2(){ //gg()返回对象时会调用copy构造函数,创建一个匿名对象,所以会有两次析构, //析构掉gg()中创建的对象和创建的匿名对象,而且会立即析构匿名对象。生命周期只是Line51这一行代码 //正是这个原因,构造函数中调用构造函数是个危险的行为 gg(); }void objpaly3(){ cout<<"************************************"<<endl; //用匿名对象初始化cs,此时C++编译器直接把匿名对象转成cs;即转成有名对象 //相当于提前分配了内存只不过是匿名的,在使用时直接赋予一个名字;匿名对象不会被析构 copyStruct cs1 = gg(); cs1.printCS();}void objpaly4(){ cout<<"************************************"<<endl; //用匿名对象赋值给一个同类型的对象,然后匿名对象立即被析构 copyStruct cs2; cs2 = gg(); cs2.printCS();}int main(){ //objpaly(); objpaly2(); objpaly3(); objpaly4(); system("pause"); return 0;}
0 0
- C++学习——copy构造函数所涉及匿名对象的问题
- C++类对象的复制-拷贝构造函数——The c + + class object replication - copy constructor
- copy构造函数调用时机4,函数返回值是匿名对象
- 拷贝构造函数的调用场景和匿名对象的去留问题
- java学习日志(八)-- 匿名对象、封装、构造函数
- Java基础(面向对象一——理解、匿名函数、封装、构造函数和this关键字的使用)
- 黑马程序员——Java高新技术——反射、反射所涉及的对象等
- (C/C++学习笔记)Copy构造函数应用场景
- 黑马程序员——黑马学习日志之五 面向对象,类,函数,匿名对象,封装,构造函数,this,代码块
- 【期待高手】C++类外调用“返回值为对象的函数”产生的“调用copy构造函数”的问题
- 深入探索C++对象模型笔记之四 —— 构造函数语意学 (Copy Constructor的建构操作)
- 关于匿名函数构造器的继承问题
- 定义copy构造函数时应注意的问题
- java-重载,构造函数,匿名对象
- 封装性 匿名对象 构造函数
- 匿名对象,构造函数,this关键字
- 拷贝构造函数4.匿名对象
- Copy构造函数的理解
- 利用Tesseract来识别验证码
- 【数据库】MySQL的安装与简单使用
- 【即时通讯】即时通讯及XMPP概述及…
- 【即时通讯】XMPP调试与简单使用
- #pragma分析
- C++学习——copy构造函数所涉及匿名对象的问题
- TCP/IP实现以及常见问题
- spring-boot通用配置文件整理
- POJ 2155 Matrix
- 一次快速排序错误引发的思考
- cocos2d-x 进度条实现(被砍)掉血效果
- Linux命令大观
- C/C++高阶语法:函数指针及其应用
- 避免用char类型作为数组小标