条款5:了解C++提供的默认函数
当我们定义一个类时,如果没有声明任何函数,那么C++编译器会默认提供4个函数:默认构造函数、复制构造函数、赋值操作符函数、析构函数,并且这些函数默认都是public且inline的。因此,当你定义如下类:
class Empty
{ }; // 等价于定义如下类:
class Empty
{
public:
Empty(){ } // default构造函数
Empty(const Empty& rhs){ } // copy构造函数
~Empty(){ } // 析构函数
Empty& operator=(const Empty& rhs){ } // copy assignment操作符
};
只有当这些函数需要被调用时,编译器才会创建它们,如下为例子:
Empty e1; // 调用默认构造函数,结束后调用析构函数
Empty e2(e1); // 调用复制构造函数
e2 = e1; // 调用复制赋值操作符
区分复制构造函数和赋值操作符函数:
复制构造函数:用一个已有的对象去初始化一个正在创建的对象。
赋值操作符函数:用一个已有的对象赋值给另一个已存在的对象。
注意:
如果一个类中含有reference或者const成员,则编译器不会提供默认的copy assignment函数。
如果base类中的copy assignment函数被定义为private,则编译器不会为其derived类提供默认的copy assignment函数。
条款5:了解C++提供的默认函数的更多相关文章
- c/c++ 编译器提供的默认6个函数
c/c++ 编译器提供的默认6个函数 1,构造函数 2,拷贝构造函数 3,析构函数 4,=重载函数 5,&重载函数 6,const&重载函数 #include <iostream ...
- C++11之使用或禁用对象的默认函数
[C++11之使用或禁用对象的默认函数] C++11 允许显式地表明采用或拒用编译器提供的内置函数.例如要求类型带有默认构造函数,可以用以下的语法: 另一方面,也可以禁止编译器自动产生某些函数.如下面 ...
- C++空类中的默认函数
定义一个空的C++类,例如 class Empty { } 一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于 cla ...
- CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数
类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 // person.h #ifndef _PERSON_H_ #define _PERSON_H_ class Person{ public : ...
- C++:类中两个易被忽略的默认函数
C++的自定义类中有六个默认的函数,即如果用户没有显式定义这些函数时,C++编译器会类中生成这些函数的默认形式.除了大家所熟知的构造函数.拷贝构造函数.赋值函数和析构函数外,C++为自定义类 还提供了 ...
- C++(1)C++类四个默认函数---构造函数、析构函数、拷贝函数、赋值函数
C++构造函数和析构函数 默认构造函数指不带参数或者所有参数都有缺省值的构造函数!!! (1)构造函数.析构函数与赋值函数 构造函数.析构函数与赋值函数是每个类最基本的函数.它们太普通以致让人容易麻痹 ...
- 一款多功能的移动端滚动选择器,支持单选到多选、支持多级级联、提供自定义回调函数、提供update函数二次渲染、重定位函数、兼容pc端拖拽等等..
https://github.com/onlyhom/mobileSelect.js/blob/master/docs/README-CN.md mobileSelect.js 一款多功能的移动端滚动 ...
- c++11 默认函数的控制
1. 类与默认函数: C++中声明自定义的类,编译器会默认生成未定义的成员函数: 构造函数 拷贝构造函数 拷贝赋值函数(operator=) 移动构造函数 移动拷贝函数 析构函数 编译器还会提供全局默 ...
- java提供的默认list排序方法-转
1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...
随机推荐
- RAW格式
一.什么是RAW文件?RAW文件主要是一种记录了数码相机传感器的原始信息,同时伴随着一些由相机所产生的一些元数据(metadata,诸如IS0的设置.快门速度.光圈值.白平衡等)的文件.不同的相机制造 ...
- 远程DLL注入
界面如下: 关键部分代码如下: void CInjectDllDlg::OnBnClickedButtonInject() { // TODO: 在此添加控件通知处理程序代码 UpdateData(T ...
- 测试一个C段网络的联通性
#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHnetwork ...
- 修改Hosts后对火狐不起作用解决办法
修改Hosts后对火狐不起作用: 重启火狐浏览器仍不起作用的话,执行下面操作即可. FireFox - 选项 - 高级 - 网络 - 立即清除(缓存) 就解决了
- c# 实现串口编程-操作LED屏幕
串口编程主要用到SerialPort这个类,主要实现对串口发送字节数组然后点阵屏显示相关信息,其实这个功能很简单下面给大家把整体思路用流程图展现如下:. 其实整体思路就如流程图.下面是整个流程图的一个 ...
- .Net 内存泄露
一.事件引起的内存泄露 1.不手动注销事件也不发生内存泄露的情况 我们经常会写EventHandler += AFunction; 如果没有手动注销这个Event handler类似:EventHan ...
- MongoDb Replica Set中使用的地址
Unable to connect to a member of the replica set matching the read preference Primary 今天尝试使用MongoDB ...
- ASP.NET MVC5学习笔记之Controller执行ControllerDescriptor和ActionDescriptor
一. ControllerDescriptor说明 ControllerDescriptor是一个抽象类,它定义的接口代码如下: public abstract class ControllerDes ...
- 靶形数独 (codevs 1174)题解
[问题描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z 博士请教,Z 博士拿出了他最近发明的“ ...
- Python基础 第二天
1.http://www.cnblogs.com/beer/p/5672678.html requests和beautifulsoup