zoukankan      html  css  js  c++  java
  • Effective C++总结

    条款1:尽量用const和inline而不用#define

    本质是你想编译时就检查出错误,还是运行时出错。

    const inline是编译期执行,有参数检查等动作,而#define是预编译时执行。

    但是不能完全抛弃#define,它可以控制是否编译某段代码。

    条款2:尽量用<iostream>而不用<stdio.h>

    为什么呢,一个简单的原因是stdio的控制格式实在够烦人的,还有什么原因呢?

    作者给出的原因很有深度“iostream具有类型安全和可扩展的特点,而stdio则没有此特点,类型安全和扩展性是C++的基石”。

    什么是类型安全——类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。

    (一篇谈类型安全的不错的博文http://blog.csdn.net/btwsmile/article/details/6693178

    1. int main()  
    2. {  
    3.     printf("%f\n",10);  
    4.     system("pause");  
    5.     return 0;  

    上面代码输出0.000000,这就是类型不安全!

    那么扩展性指的是什么?——重载!

    条款3:尽量用new和delete而不用malloc和free

    malloc和free(及其变体)会产生问题的原因在于它们太简单:他们不知道构造函数和析构函数。

    条款4:尽量使用c++风格的注释

    该条款没多大意思,要注意的是/* */形式的注释不能嵌套。

    C++风格的注释,指的是行注释。

    条款5:对应的new和delete要采用相同的形式

    new数组对应delete [].

    string *stringptr1 = new string;
    string *stringptr2 = new string[100];
    
    ...
    
    delete stringptr1;// 删除一个对象
    delete [] stringptr2;// 删除对象数组
    

    如果你在stringptr1前加了"[]"会怎样呢?答案是:那将是不可预测的;

    如果你没在stringptr2前没加上"[]"又会怎样呢?答案也是:不可预测。而且对于象int这样的固定类型来说,结果也是不可预测的,即使这样的类型没有析构函数。

    所以,解决这类问题的规则很简单:如果你调用new时用了[],调用delete时也要用[]。如果调用new时没有用[],那调用delete时也不要用[]。

    条款6:析构函数里对指针成员调用delete

    new和delete是一一对应的,可用auto_ptr智能指针解决忘记释放申请的内存问题。

    条款7:预先准备好内存不够的情况

    使用set_new_handler是处理内存不够情况下一种方便,简单的方法。

  • 相关阅读:
    Mvc+三层(批量添加、删除、修改)
    js中判断复选款是否选中
    EF的优缺点
    Git tricks: Unstaging files
    Using Git Submodules
    English Learning
    wix xslt for adding node
    The breakpoint will not currently be hit. No symbols have been loaded for this document."
    Use XSLT in wix
    mfc110ud.dll not found
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3133926.html
Copyright © 2011-2022 走看看