美文网首页
Effective C++ 读书笔记(一)

Effective C++ 读书笔记(一)

作者: 登龙zZ | 来源:发表于2017-05-17 17:55 被阅读0次

    Effective C++ 读书笔记(一)


    版权声明:本文为 cheng-zhi 原创文章,可以随意转载,但必须在明确位置注明出处!

    资源管理 - 条款 16

    • 成对使用 new 和 delete 时要采取相同形式

    错误的做法:

    int *p;
    delete []p;
    
    std::string *stringArray = new std::string[100];
    delete stringArray;
    

    正确的做法:

    int *p;
    delete p;
    
    std::string *stringArray = new std::string[100];
    delete []stringArray;
    

    原则:

    • 如果在 new 中使用了 [],必须在 delete 时加上 [],否则绝对不要加 [] 。
    • 当你的指针不是原始的简单数据类型时,delete 时加上 [] 。

    设计与声明 - 条款 22

    • 将成员变量声明为 private

    错误的做法:

    class Test {
    public:
        int var;
    };
    

    正确的做法:

    class Test {
    private:
        int var;
    };
    

    优势:

    • 将成员变量声明为 private 可以让客户保证访问该数据只能通过指定的接口,而 class 的作者则可以灵活的改变接口实现,但是不会影响用户。

    设计与声明 - 条款 23

    • 宁以 non - member,non-friend 替换 member 函数

    不好的做法:

    class Test {
    public:
        void clear_a();
        void clear_b();
        void clear_c();
    public:
        /* member fun */
        void clear_all() 
        {
            clear_a();
            clear_b();
            clear_c();
        }
    };
    

    优秀的做法:

    namespace TestSpace {
        class Test {
        public:
            void clear_a();
            void clear_b();
            void clear_c();
        };
        
        /* non-member,non-friend fun */
        void clear_all(Test& t)
        {
            t.clear_a();
            t.clear_b();
            t.clear_c();
        }
    }
    

    原则:
    当你在一个 class 中定义的一个函数可以重新定义为 non-member,non-friend 函数时,请将它定义成 non-member,non-friend,因为这样可以提高这个 class 的封装程度,这虽然不符合面向对象的守则,但是这个一个例外,因为这种方法比使用原始的守则封装度更好,你应该对你的代码更好,不是吗?

    原文地址

    相关文章

      网友评论

          本文标题:Effective C++ 读书笔记(一)

          本文链接:https://www.haomeiwen.com/subject/dtadxxtx.html