• Effective C++ Item 18 Make interfaces easy to use correctly and hard to use incorrectly


    1. A good API will provide easy to use interfaces but also provide hard to miss-use interfaces. Usually the later one is more fundamental than that of the previous one. Consider you want to write a data class, there are thousands ways to write it. Here is one example:

    class Date {
    public:
        Date(int month, int day, int year);
        ...
    };
    
    Date(3, 4, 2014);
    Date(4, 3, 2014);

    Both are OK, but only one is logical right.

    Under such situation, a better way to implement that is to constrict clients what they can do and force them to right direction:

    class Month {
    public:
        static Month Jan() {
            return Month(1);
        }
        ...
    private:
        explicit Month(int m);
    };
    
    Data d(Month::Mar(), Day(10), Year(2011));

    2. Let's see another example, suppose your interface returns a dynamic allocated resource and will be deleted after all. There are chances that a programmer will forget to delete it or delete it multi times. So, return a smart pointer would be a great idea.

    std::tr1::shared_ptr<Investment> createInvestment() {
        std::tr1::shared_ptr<Investment> retVal(static_cast<Investment>(0),
            getRidOfInvestment());
    
        retVal = ...; //let retVal point to right object
        return retVal;
    }

    Besides, smart pointer have another advantage that it will use default or assigned deleter, and you don't need to worry about "cross-DLL problems".

  • 相关阅读:
    Linux文件和目录管理常用重要命令
    Windows和Linux下Mysql 重置root 密码
    瀑布流vue-waterfall的高度设置
    vue-cli 引入axios及跨域使用
    Vue 脱坑记
    shell基础
    正则
    安装卸载
    压缩打包
    vim工具
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3573809.html
Copyright © 2020-2023  润新知