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 ...
随机推荐
- Linux快速上手
1.Linux系统架构 内核(kernel) 内存管理(mm) Linux内存特性无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Lin ...
- 微信小程序与传统APP十大优劣对比
随着微信公众平台的开放,微信端小程序涌现市场,带来很很多便利和简单的原生操作,询:微信端小程序是否会替代传统的APP应用?两者的优劣如何?我们一起来看看传统APP与微信端小程序十大优劣对比 ...
- laravel数据库迁移(三)
laravel号称世界上最好的框架,数据库迁移算上一个,在这里先简单入个门: laravel很强大,它把表中的操作写成了migrations迁移文件,然后可以直接通过迁移文件来操作表.所以 , 数据迁 ...
- C和指针 第十六章 标准函数库 信号
信号名<signal.h> 程序中大多数错误都是程序本身导致的,但是,有些程序遇到的事件却不是程序本身所引发的.比如用户终止程序,程序无法预知此类事件发生的情况,信号就是为了对此类事件做出 ...
- 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程
发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (va ...
- 对偶SVM
1.对偶问题的推导 为什么要求解对偶问题?一是对偶问题往往更容易求解,二是可以自然的引入核函数. 1.1 用拉格朗日函数将原问题转化为"无约束"等价问题 原问题是: 写出它的拉格朗 ...
- 解决Unsupported major.minor version 51.0错误
解决Unsupported major.minor version 51.0错误使用jdk6运行项目时发生了Unsupported major.minor version 51.0错误.经过网上搜索发 ...
- 提交按钮ajax方式
function doSubmit2(){ $("#formobj").form("submit", { url : "sjsCorporationC ...
- (二)Netty源码学习笔记之服务端启动
尊重原创,转载注明出处,原文地址:http://www.cnblogs.com/cishengchongyan/p/6129971.html 本文将不会对netty中每个点分类讲解,而是一个服务端启 ...
- 448. Find All Numbers Disappeared in an Array
https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/ 给出一列数,1 ≤ a[i] ≤ n,n是数组大小,有些 ...