默认构造函数和拷贝构造函数
构造函数
- A(); // 默认构造函数
- A(const A&); // 拷贝构造函数
- A& operator=(const A& a) // 拷贝构造函数
- ~A(); // 默认析构函数
默认构造函数
当一个类没有定义构造函数时,编译器才生成默认构造函数。
当定义类对象没有提供初始化式时,使用默认构造函数进行初始化。
- 具有该类类型成员的类,必须通过构造函数初始化列表进行初始化。
- 该类不能用作动态分配数组(new)的元素类型。
- 使用该类作为元素类型的静态数组,必须显式初始化。
- 不适用于没有提供初始化的容器
默认构造函数的使用
- A test(); ×
- A test; √
- A test = A(); √
拷贝构造函数
对于一个类X,如果一个构造函数的第一个参数是下列之一:
- X&
- const X&
- volatile X&
- const volatile X&
且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数。
拷贝构造函数不能由成员函数模版生成.
- 手动调用
- 函数返回类对象
- 函数有类类型参数
- 容器初始化
- 当类有指针类型的成员时,简单拷贝(浅拷贝)将造成两个不同对象的指针指向同一区域,出现访问冲突、多次delete等错误。
- 大量拷贝构造函数的调用,降低运行效率。
- 显式定义拷贝构造函数(为指针重新申请内存,并拷贝内存数据 -- 深拷贝)
- 禁止拷贝(通过成员函数进行赋值,提高运行效率)
1 class Widget 2 { 3 ... 4 private: 5 Widget(const Widget&); // 声明为私有 6 Widget& operator=(const Widget&); 7 }
View Code
转载于:https://www.cnblogs.com/TaoyzDream/p/3688331.html
默认构造函数和拷贝构造函数相关推荐
- C++ : 构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景
构造函数,拷贝构造函数,移动构造函数,拷贝赋值运算符,移动赋值运算符应用场景 #include <iostream> using namespace std;class Construct ...
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由"底层向上"开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达 ...
- 构造函数,拷贝构造函数,赋值函数
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个 ...
- 构造函数、拷贝构造函数、赋值函数和析构函数
文章目录 一.构造函数 1.认识构造函数 2.初始化列表 二.拷贝构造函数 1.类对象的拷贝 2.浅拷贝和深拷贝 三.赋值函数 四.析构函数 1.认识析构函数 2.销毁,清理? 3.析构函数来阻止该类 ...
- C++ 构造函数、复制构造函数,拷贝构造函数(深拷贝、浅拷贝)
文章目录 前言 一.什么是构造函数? 二.构造函数的分类 复制构造函数 复制构造函数被调用的三种情况 复制构造函数在以下三种情况下会被调用. 三.拷贝构造函数的分类 深.浅拷贝构造函数的区别 示例代码 ...
- 不存在从void转换到sqlist的适当构造函数_拷贝构造函数与赋值构造函数
拷贝构造函数与赋值构造函数 在C++中,如果要创建一个新的类,并用已有的类来给它附初值.就要用到拷贝构造函数,拷贝构造函数又分为两种. 1.合成的拷贝构造函数 在你没有定义自己的拷贝构造函数而又调用了 ...
- String 的普通构造函数、拷贝构造函数、析构函数、赋值函数
转自:http://blog.csdn.net/xiaoxiangzhu660810/article/details/8149398 题目:编写类String的构造函数.析构函数和赋值函数,已知类St ...
- 类string的构造函数、拷贝构造函数和析构函数
原文:http://www.cnblogs.com/Laokong-ServiceStation/archive/2011/04/19/2020402.html 类string的构造函数.拷贝构造函数 ...
- 移动构造函数和拷贝构造函数的区别
讲讲移动构造函数与拷贝构造函数的区别 :移动构造函数是c++11的新特性,移动构造函数传入的参数是一个右值 用&&标出.一般来说左值可以通过使用std:move方法强制转换为右值.首先 ...
最新文章
- shell if else
- Linux系统:centOS 7 忘记密码怎么办?
- 编程之美——4.11 扫雷游戏的概率
- cps1 cps2 android,图文教程:CPS1和CPS2模拟器使用
- Windows 7技巧之Telnet组件消失之迷
- python 多个列表_Python同时迭代多个列表
- VI3的VLAN配置:VST、EST和VGT标记
- 普通人看Build 2019 值得留心的亮点有哪些?
- 关于python语言和人工智能下哪个说法不正确_“在资源管理器”窗口中,文件夹图标左侧有“...
- RAID5阵列掉盘显示未初始化---解决过程
- React Native npm镜像安装命令
- 【实战项目惜时App项目总结分析】Vue-cli3+Vant UI+Vue-element-admin+Egg.js+Mysql
- 其他——dhtmlxGantt甘特图API精华总结
- Java 面试题看这些就够了
- 智能扫地机器人哪个品牌好?最受欢迎排行榜前十名
- 这就是传说中的一行代码一句注释?Python每日一练----种花
- Eclipse汉化方法以及汉化包
- iOS POS之3DES加密
- [LLVM教程]LLVM之第一个语言前端
- 镜头像差之一——球差
热门文章
- qt 雷达扫描障碍物_自动驾驶系统入门(五) - 激光雷达
- postgresql参数化查询_一个能融会贯通PostgreSQL监控的人,大概率是高手
- c语言点阵字符,点阵的汉字程序
- java猴子吃香蕉_Java 猴子分香蕉
- python求两数之和的命令_python实现读取命令行参数的方法
- 电路板上的插头怎么拔下来_中国连城 | 接插件在电路板上的作用及它的种类介绍...
- 安装linux并卸载windows,如何在安装双启动后卸载 Windows 或者 Linux
- java code combat_极客战记怎么换成java_「网易官方」极客战记(codecombat)攻略-沙漠-脆弱的士气......
- python unit test 访问开发代码_python unittest 源码分析
- ajax put请求_前端基础面试:手写一个ajax,说说XMLHttpRequest 都有哪些属性?