More Effecive C++

条款3:决不要把多态应用于数组

 

条款4:避免不必要的默认构造函数

  1. 一个类没有缺省构造函数:
    .无法建立数组; 
        可利用非heap数组. A array[] ={A(1),A(2)};
        但无法用在heap数组. 即: A* array = new A[2];
        对于heap数组,用指针数组代替对象数组. 
            A*[] pArray = new A*[2];
            for(int i=0;i<2;i++) pArray[i] = new A(i);
        或placement new
            A* raw = (A*) operator new[] (2* sizeof(A));
            for(int i=0;i<2;i++) new(&raw[i]) A(i);
    .无法在许多基于模板的容器类中使用,例如:数组模板类.

条款5:小心用户自定义的转换函数

    隐式转换

  1. 单参数构造函数
  2. 隐式类型转换符

条款9:使用析构函数防止资源泄漏
条款10:防止构造函数里的资源泄漏

使用auto_prt对象代替成员指针: Image* image ---> auto_ptr m_image

条款24:理解虚函数、多重继承、虚基类以及RTTI所带来的开销

  1. 虚函数
    .虚表
    .虚指针
    .无法使用inline特性
  2. 多重继承
    .多个vptr&&vtbl(除自身外,每个基类一个)
  3. RTTI
    .运行时找到对象和类的有关信息. 存储在type_info的对象里.  

条款34: 将非未类设计为抽象类

  1. dynamnic_cast 失败,bad_cast异常
  2. 大多数纯虚函数没有实现,纯析构函数是个例外.

条款34:理解如何在同一程序中混合使用C++和C

  1. 名变换,函数重载
    应在C++编译器下使用 extern
    #infde  __cplusplus
    extern "c"
    {
        void drwaline();
    }
    #endif
    混合链接来自于不同编译器的obj文件,得到链接错误.
  2. 静态初始化
    在main前后,有大量代码被执行.但main必须由C++编写.
  3. 动态内存分配
    delete/free: strdup不在C/C++标准库中,到底使用哪一个释放内存.依据strdup来自哪一个库
  4. 数据结构的兼容性
    C/C++之间传递数据.不可能让C函数了解C++的特性.

    .确保C++/C产生兼容的obj文件
    .将两种语言都使用的函数声明为extern 'c'
    .尽量用C++写main
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值