假设你为一个用来表现日期的class设计构造函数:
class Date {
public:
Date(int month, int day, int year);
};
以上用户容易犯下如下错误,1:一错误的次序传递参数
Date d(30, 3, 1995);
2:传递一个无效的月份或天数:
Date d(2, 30, 1995);
一个解决办法是导入见得外覆类型来区别天数,月份,年份,然后与Date构造函数中使用这些类型:
struct Day {
explicit Day(int d) : val(d) {}
int val;
};
struct Month {
explicit Month(int m) : val(m) {}
int val;
};
struct Year {
explicit Day(int d) : val(d) {}
int val;
};
class Date {
public:
Date(const Month& m, const Day& d, const Year& y);
... // 其他函数
}
Date d(30, 3, 1996); // 错误,不正确的类型
Date d(Day(30), Month(3), Year(1995)); //错误,不正确的类型
Date d(Month(3), Day(30), Year(1995)); // 正确
条款13导入了一个factory函数,它返回一个指针指向Investment继承体系内的一个动态分配对象,并将creatInvestment的返回值存储于一个智能指针如auto_ptrh或者shared_ptr内,但是用户忘记使用只能指针怎么办?解决办法就是让函数返回一个智能指针
std::shared_ptr<Investment> createInvestment();