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 ...
随机推荐
- Create a new Windows service on windows server2012
netsh http add iplisten ipaddress=0.0.0.0:15901 sc.exe create "FPPService" binPath= " ...
- MAC下Homebrew的安装
1.Homebrew是啥东东? Homebrew的官方网站http://brew.sh/index.html上有这么一句“Homebrew installs the stuffyouneed that ...
- FPGA优化之高扇出
Fanout即扇出,模块直接调用的下级模块的个数,如果这个数值过大的话,在FPGA直接表现为net delay较大,不利于时序收敛.因此,在写代码时应尽量避免高扇出的情况.但是,在某些特殊情况下,受到 ...
- setprecision **fixed
#include <iostream> #include <iomanip> using namespace std; int main( void ) { const dou ...
- Hadoop学习记录
http://blog.csdn.net/m_star_jy_sy/article/details/26476907配置windows里eclipse连接hadoop集群 hadoop常见命令 启动H ...
- Win10搭建Linux开发环境之网络连接设定
一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...
- ".NET Compact Framework v2.0 could not be found."
参考: http://blog.csdn.net/godcyx/article/details/7348431 问题原因: That's a known issue where VS can't di ...
- ORACLE发送带附件邮件的二三事之一
在oracle使用过程中,我们可以通过pl/sql生成数据文件,也可以通过spool on spool off生成,但某些环境下,我们需要通过存储过程处理数据,数据处理完,需要自动生成数据文件,手工导 ...
- day8
作业要求: 1.用socket写一个 ftp服务端与客户端 2.支持get put命令 作业下载地址:ftp://www.wudonghang.com/oldboy/day8.zip ...
- ecshop不同样式文章页调用不同文章模板
根据需要,希望不同的文章分类下的文章页有不一样的页面风格.也就是说根据文章分类ID来判断,输出不同的文章页模板. 重点就是文章分类的ID. 打开:article.php,在120多行左右,找到$sma ...