class Month
{
public:
static Month Jan(){return Month(1);}
static Month Feb(){return Month(2);}
//......
private:
explicit Month(int i):val(i){}
int val;
};
class Year
{
public:
explicit Year(int i):val(i){}
private:
int val;
};
class Day
{
public:
explicit Day(int i):val(i){}
private:
int val;
};
class Date
{
public:
Date(const Month& m,const Day& d,const Year& y){}
Date(int month,int day,int year){}
};
int main()
{
Date(2,20,1995);
//這樣設計可能導致發生潛在的錯誤,
//比如數字順序搞錯,或者數字打錯
Date(Month::Jan(),Day(20),Year(1995));
//這樣接口就設計的更加通俗易懂,而不易犯錯
}
提供行爲一致的接口,就像stl容器的接口十分一致,每個容器都有一個名爲size的成員函數
shared_ptr可以消除潛在的客戶錯誤,cross-DLL problem,這個問題發生於對象在dll中被new創建,卻在另一個dll內被delete銷燬,這會導致運行時錯誤
這個現在還不是特別理解,也沒有查到,以後等查到再做細節補充