• 指针和引用

    • 引用对象必须存在,即不能引用空值,指针可以指向空值,引用必须初始化指向一个对象
    • 指针可以改变指向的对象,引用不能改变所引用的对象
    • 不改变指向对象使用引用,改变指向对象使用指针
    • 重载[]时必须返回引用,以保证返回对象可以被赋值改变
  • 类型转换
    • (type)expression -> static_cast
    • const_cast : 转换掉const 属性
    • dynamic_cast: 向下转型
  • 不对数组使用多态:避免子类向基类转型导致切割
  • 避免无用的缺省构造函数
    • 建立数组时,无法默认构造,即不能构建数组
  • 尽量不重载|| 和&& 操作符,避免与系统内置布尔表达式短路算法的不一致
  • new操作符:分配足够内存容纳所需类型对象,对象内存初始化
    • operator new 仅分配内存
    • placement new 仅初始化内存中对象
  • 析构函数防止资源泄漏:使用智能指针,离开作用于自动释放空间,或者将资源封装为类对象,实现自动释放
  • 在构造函数中防止资源泄露:指针默认初始化为0,构造参数不空则指向参数,析构函数释放指针内容(不管指针内容是否为空)(c++释放空指针是可以的)
    • 对象在构造过程中抛出异常,c++不负责析构
    • 指针数据对象必须初始化,初始化过程必须注意初始化失败的情况,捕捉异常并local释放指针,抛出异常;
    • 在异常传递前,清理空间,然后传递异常
    • 避免异常在析构函数中抛出,在异常内部捕获

  • 通过指针抛出异常,避免拷贝对象,同时避免传出一个被释放的异常对象指针
  • 通过引用捕获异常,避免对象重复构造,又不会指向被释放内存
  • 分期计算,每次迭代计算结果,缓存结果:预取和缓存
  • 尽量避免临时对象的产生,任何常量引用都有可能导致临时对象绑定参数的的可能**??
  • 重载避免隐式类型转换
  • 用operate+= 实现operate+,减少命名对象使用,临时对象开销更小

  • 虚函数与多态
    • 调用虚函数时,执行代码必须与调用函数对象的动态类型一致
    • 虚函数表:每个类的虚函数表有继承基类的虚函数(未被覆盖),自己声明的虚函数,全部以指针形式指向函数地址
    • 每个声明了虚函数的对象包含一个虚表指针,指向对应类的虚函数表
    • 每个类的vtbl[0]处包含一个type_info指针,指向RTTI信息

    • 虚继承内存模型

  • 堆中建立对象:禁止隐式构造和析构即可实现禁止new 以外的构造

    • private 析构函数,设置伪析构函数调用析构函数实现析构,析构函数私有则不能在栈上创建类对象(无法自动析构)
  • 封装和抽象,考虑通用化
  • 非尾端类设计为抽象类,方便继承和实例化

More Effective c++的更多相关文章

  1. Effective前端2:优化html标签

    div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...

  2. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  3. 《Effective java》-----读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...

  4. 《Effective Java》学习笔记——积累和激励

    从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...

  5. Effective前端5:减少前端代码耦合

    什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: ...

  6. Effective前端4:尽可能地使用伪元素

    伪元素是一个好东西,但是很多人都没怎么用,因为他们觉得伪元素太诡异了.其实使用伪元素有很多好处,最大的好处是它可以简化页面的html标签,同时用起来也很方便,善于使用伪元素可以让你的页面更加地简洁优雅 ...

  7. Effective前端3:用CSS画一个三角形

    p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...

  8. Effective前端1:能使用html/css解决的问题就不要使用JS

    div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...

  9. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  10. effective java 读后感

    think in java  , effective java  这两本书一直都在java的生态圈中经久不衰.本来想着先翻过 think in java 这本大山,但是读到一半就放弃了.过长的篇幅,让 ...

随机推荐

  1. FTP上传-封装工具类

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  2. squid源码安装下的conf文件默认值和提示

    #    WELCOME TO SQUID 3.0.STABLE26#    ----------------------------##    This is the default Squid c ...

  3. 数位DP之奥义

    恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...

  4. 使用pngquant命令近乎无损压缩PNG图片大小减少70%左右

    1.安装 wget http://pngquant.org/pngquant-2.8.2-src.tar.gz tar -xzf pngquant-2.8.2-src.tar.gz cd pngqua ...

  5. Qt开发中的实用笔记二--中文转码问题和string转换问题:

    一,中文乱码转码问题 1,转码三句话:window下默认是GBK格式,linux下默认是UTF-8,看情况转换UTF-8/GBK QTextCodec::setCodecForTr(QTextCode ...

  6. C++中一个常用的句型(两个for(;;)语句连用的重要性)

    在一些简单的C++编程中,经常会用到两个for(;;)语句连用的情况,这是一个常用句型,因此感觉也非常重要.下面举两个例子说明一下: 例1.用两个for(;;)语句来进行数组元素大小的排序 #incl ...

  7. T-SQL中的随机数

    SQL开发中会有生成随机数的需求,下面说几种常用的需求和解决办法(基于MS SQL),最后总结出通用的办法: 1.0-9间的随机整数,包括0和9本身: abs(checksum(newid()))%1 ...

  8. Hypernetes简介

    好久没有更新博客了,今天给大家介绍下最近在Hypernetes上做的工作,这个也是之前在微信群里的一个分享. Hypernetes是一个真正多租户的Kubernetes Distro. Hyperne ...

  9. Spark数据传输及ShuffleClient(源码阅读五)

    我们都知道Spark的每个task运行在不同的服务器节点上,map输出的结果直接存储到map任务所在服务器的存储体系中,reduce任务有可能不在同一台机器上运行,所以需要远程将多个map任务的中间结 ...

  10. Atom插件推荐

    1.File Icons 为各种不同的文件显示icon 2.git plus 添加git的功能 3.atom-beauty 代码格式化工具 4.eclipse keybindings 在atom上使用 ...