Effective C++ 笔记2(构造,析构,赋值)
条款5:了解C++默默编写并且调用了哪些函数
1、 构造函数,析构函数,拷贝赋值函数,拷贝构造函数。
class Empty
{
public:
//默认构造函数
Empty(){};
//拷贝构造函数
Empty(const Empty& rhs){}
//析构函数
~Empty(){} //拷贝赋值函数
Empty& operator=(const Empty& rhs){};
}; //默认构造函数
Empty e1;
//拷贝构造函数
Empty e2(e1);
//拷贝赋值函数
Empty e3=e1;
2、 类中包含引用的时候无法进行一般的赋值操作,必须自己定义拷贝赋值操作符
条款6:若不想使用编译器自动生成的函数就应该明确拒绝
1、 声明为private可以阻止(单不绝对安全,member函数和friend函数还可以调用)
class Empty
{
public:
//默认构造函数
Empty(){};
//析构函数
~Empty(){} private:
//拷贝构造函数
Empty(const Empty& rhs){}
//拷贝赋值函数
Empty& operator=(const Empty& rhs){};
};
2、 声明一个uncopyable的基类,再继承它
class Empty:private Uncopyable
{
public:
//默认构造函数
Empty(){};
//析构函数
~Empty(){} }; class Uncopyable
{
public:
//默认构造函数
Uncopyable(){};
//析构函数
~Uncopyable(){} private:
//拷贝构造函数
Uncopyable(const Uncopyable& ){}
//拷贝赋值函数
Uncopyable& operator=(const Uncopyable& ){};
};
条款7:为多态基类声明virtual析构函数
1、 基类的析构函数要加virtual,防止delete的时候局部销毁
2、 不是基类别就不需要
条款8:别让异常跳出析构函数
1、 析构函数在处理的时候一定要加上try catch
2、 如果需要对异常进行反应,则把处理写成一个普通的方法处理,加上标志位,运行正常后再在析构函数中处理
条款9:绝不在构造函数和析构函数中调用virual函数
条款10:令operator= 返回一个reference to *this
1、 class& operator=(){return *this}
条款11:在operator=中处理自我辅值
1、确定在一个函数中包含2个对象的时候,这两个对象是同一个对象的情况下是否正确
条款12复制对象时勿忘记其每一个成分
1、
Effective C++ 笔记2(构造,析构,赋值)的更多相关文章
- Effective C++笔记:构造/析构/赋值运算
条款05:了解C++默默编写并调用哪些函数 默认构造函数.拷贝构造函数.拷贝赋值函数.析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性. 当我们没有人为的定义上面的几个函 ...
- Effective C++ 笔记二 构造/析构/赋值运算
条款05:了解C++默默编写并调用哪些函数 编译器默认声明一个default构造函数.一个copy构造函数.一个copy assignment操作符和一个析构函数.这些函数都是public且inlin ...
- EC++学习笔记(二) 构造/析构/赋值
条款05:了解c++默默编写并调用了哪些函数 编译器可以暗自为 class 创建default构造函数,copy构造函数,copy assignment操作和析构函数所有这些函数都是 public 并 ...
- 《Effective C++》第2章 构造/析构/赋值运算(2)-读书笔记
章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...
- 《Effective C++》第2章 构造/析构/赋值运算(1)-读书笔记
章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...
- EffectiveC++ 第2章 构造/析构/赋值运算
我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 2 构造 / 析构 / 赋值 条款 05:了解C++ ...
- Effective C++ —— 构造/析构/赋值运算(二)
条款05 : 了解C++默默编写并调用哪些函数 编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数. 1. default构造函 ...
- Effective C++笔记(二):构造/析构/赋值运算
参考:http://www.cnblogs.com/ronny/p/3740926.html 条款05:了解C++默默编写并调用哪些函数 如果自定义一个空类的话,会自动生成默认构造函数.拷贝构造函数. ...
- 《Effective C++》读书笔记 被你忽略的关于构造析构赋值
如果程序员没有定义,那么编译器会默认隐式为你创建一个copy构造函数,一个copy赋值操作符,一个析构函数.另外如果你没有声明任何构造函数,编译器会为你声明一个default构造函数. 但是只有当这些 ...
- Effective C++ -- 构造析构赋值运算
05.了解C++默默编写并调用哪些函数 编译产生的析构函数时non-virtual,除非这个类的基类析构函数为virtual 成员变量中有引用和const成员时,无法自己主动生成copy assign ...
随机推荐
- 关于BCGControlbar16.1版本的安装与使用
csdn上有BCGControlbar16.1版本的下载,地址:http://download.csdn.net/detail/wangxiangdong_sl/4821726带key,个人亲测VS2 ...
- eclipse常用快捷键
1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xm ...
- 如何在openresty里解析域名
转:原文:http://hambut.com/2016/09/09/how-to-resolve-the-domain-name-in-openresty/?utm_source=tuicool&am ...
- elastic search使用总结
1. elasticsearch安装 官方下载地址:https://www.elastic.co/downloads/elasticsearch 解压文件 elasticsearch-2.4.0.zi ...
- 获取pe文件的文件类型
工程文件petype.cpp通过调用pefile类中的函数获取文件类型. 文件类型的判断通过5个监测点完成. 监测点1:dos头的e_magic 监测点2:nt头的Signature 监测点3:文件头 ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- 枚举扩展方法获取枚举Description
枚举扩展方法 /// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="v ...
- RSA非对称性前端加密后端解密
前端加密代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...
- DevExpress 在使用Ribbon皮肤时标题栏不变化的原因
将 form的 AllowFormGlass 属性 该为False 就可以标题栏皮肤化了.
- 463. Island Perimeter
https://leetcode.com/problems/island-perimeter/ 在一个N×N的矩阵中,N<100,1代表岛,0代表海,岛内没有海,求岛的周长 [[0,1,0,0] ...