zoukankan      html  css  js  c++  java
  • 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".

  • 相关阅读:
    hdoj 6023 Automatic Judge
    hdoj 1170 Balloon Comes!
    初识vim操作和配置
    POJ 1611 The Suspects (并查集)
    HDU 1232 畅通工程 (并查集)
    计蒜客--两数之和
    计蒜客--爬楼梯 (动态规划)
    计蒜客--单独的数字 (位运算)
    计蒜客--最后一个单词的长度
    计蒜客-- 奇怪的国家 (位运算)
  • 原文地址:https://www.cnblogs.com/xinsheng/p/3573809.html
Copyright © 2011-2022 走看看