• Effective C++学习笔记(四)


    设计与声明

    条款十八 让接口容易被正确使用,不易被误用

    • 好的接口很容易被正确使用,不容易被误用。

    • 促进正确使用:接口的一致性,内置类型的行为兼容。

    • 阻止误用:建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任

    • 提到了shared_ptr。没仔细看。

    条款十九 设计class,犹如设计type

    条款二十 传递const引用,而不是value

    • 尽量用const引用替换传值,value涉及到构造析构对象,要消耗更多,const引用,没有创建任何对象,所以消耗没那么多
    class Person
    {
    public:
        Person(int a = 0) : m_a(a)
        {
        }
        virtual ~Person()
        {
            cout << "Calling Person destructor" << endl;
        }
    public:
        int m_a;
    };
    class Student:public Person
    {
    public:
        Student() {}
        ~Student() {
    
            cout << "Calling Student destructor" << endl;
        }
    
    private:
    
    };
    //如果是(Student stu),则需要构造两次,析构两次。
    bool isStudent(const Student& stu)//只需要构造一次,析构一次
    {
        return true;
    }
    
    //***************************************************************
    int main( )
    {
        Student stu;
        cout << isStudent(stu) << endl;
    
        return 0;
    }
    
    • 在底层中,引用其实是用指针来完成的。但是并非都是如此,如果参数是内置的类型或者STL的迭代器或者函数对象,比如int,那么直接传值并不会造成过多的构造和虚构。

    条款二十一 必须返回对象时,别妄想返回其reference

    • 绝不要返回pointer或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个localstatic对象而有可能同时需要多个这样的对象。

    条款二十二 将 成员变量声明为private

    • 切记将成员变量生命为private。使得客户访问数据具有一致性,可细微划分访问控制,并提供class作者以充分的实现弹性。

    • protected并不比public更具有封装性。

    条款二十三 用non-member、non-friend替换member函数

    • 这样做可以增加封装性,报过弹性和技能扩充性

    条款二十四 若所有参数皆需类型转换,请为此采用non-member函数

    条款二十五 考虑写出一个不抛异常的swap函数

    • 当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛异常

    • 调用swap时应针对std::swap使用using声明,然后调用swap,并且不带任何命名空间资格修饰

  • 相关阅读:
    python uuid
    linux 修改时区
    Nginx 缓存命中率
    MongoDB oplog 详解
    MongoDB 复本集搭建
    复制集简介
    解决Python2.7的UnicodeEncodeError: 'ascii' codec can't encode异常错误
    MongoDB 介绍
    python virtualenv
    Docker Compose 模板文件 V2
  • 原文地址:https://www.cnblogs.com/whutao/p/10869675.html
Copyright © 2020-2023  润新知