拷贝构造函数
来源:互联网 发布:quectel ec20 linux 编辑:程序博客网 时间:2024/06/06 09:26
拷贝构造函数
- 拷贝构造函数
- 一什么是拷贝构造函数
- 1 浅拷贝
- 2 拷贝构造函数
- 二在哪里使用到拷贝函数
- 1 作为参数传递给函数
- 2 对象需要通过另外一个对象进行初始化
- 3 从函数返回对象
- 一什么是拷贝构造函数
一、什么是拷贝构造函数?
1.1 浅拷贝
先来了解点预备知识,浅拷贝。所谓浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。大多情况下“浅拷贝”已经能很好地工作了,但是一旦对象存在了动态成员,那么浅拷贝就会出问题了
1.2 拷贝构造函数
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
如果没有构造函数,会自动定义,如果有指针变量且带有动态内存分配就必须自己写一个。
classname(const classname &obj) { }
二、在哪里使用到拷贝函数?
- 作为参数传递给函数
- 对象需要通过另外一个对象进行初始化
- 从函数返回对象
2.1 作为参数传递给函数
void display(ClassName obj){ cout << "Length of line : " << obj.getLength() <<endl;}
注解:当对象作为参数传递过来的时候,先产生一个temp对象,调用拷贝构造函数,当作用域结束的时候(就是函数结束),调析构。
2.2 对象需要通过另外一个对象进行初始化
Line line1(10); Line line2 = line1; // 这里也调用了拷贝构造函数
2.3 从函数返回对象
//全局函数 CExample g_Fun() { CExample temp(0); return temp; }
(1). 先会产生一个临时变量,就叫XXXX吧。
(2). 然后调用拷贝构造函数把temp的值给XXXX。整个这两个步骤有点像:CExample XXXX(temp);
(3). 在函数执行到最后先析构temp局部变量。
(4). 等g_Fun()执行完后再析构掉XXXX对象。
- 特别注意: 当我使用gcc进行编译的时候发现,返回对象自动调用复制拷贝函数的机制没有执行,经过查阅资料发现是由于gcc具有返回值优化,我们要看见结果只需要在编译时候加入参数:-fon-elide-constructors
g++ -fon-elide-constructors main.cpp
0 0
- 构造函数、拷贝构造函数
- 拷贝构造函数,构造函数
- 拷贝构造函数--默认拷贝构造函数
- 构造、拷贝构造函数基础
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数(深拷贝,浅拷贝)
- 拷贝构造函数浅拷贝深拷贝
- 拷贝构造函数,浅拷贝,深拷贝
- 拷贝构造函数 深拷贝 浅拷贝
- 拷贝构造函数----深拷贝、浅拷贝
- 拷贝构造函数
- 拷贝构造函数
- 浅析拷贝构造函数
- 拷贝构造函数
- 拷贝构造函数
- C++拷贝构造函数
- C++拷贝构造函数
- 拷贝构造函数
- 带你玩转Visual Studio——带你管理多种释出版本
- 微信 关注/取消关注事件
- 利用脚本实现.java转为.h头文件
- 泛型
- Codeforces 734D Anton and Chess 几何+模拟
- 拷贝构造函数
- Spring 配置继承
- paper: cvprw2015deep learning of binary hash for fast retrieval
- 分页插件pageHelper工作中的简单使用
- Office2016激活工具
- OCP考试过程体会
- A星寻路算法介绍
- 特朗普2016胜选演说
- 获取android签名和MD5