• 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".

  • 相关阅读:
    爬虫解析库:XPath
    手写一个小型打包构建工具
    Python网络爬虫神器PyQuery的使用方法
    人脸识别JavaScript也可以轻松搞定
    颜值即正义!这几个库颠覆你对数据交互的想象
    微信朋友圈自动点赞
    android studio的安装信息
    Docker使用笔记
    C语言联合
    Mac之Sublime Text使用Go
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3573809.html
Copyright © 2020-2023  润新知