Effective C++ 第十八條 Make interface easy to use correctly and hard
讓接口容易被使用正確,不易被誤用
當我們在為客戶設計接口的時候,需要考慮到客戶可能會犯的錯誤,盡量將接口設計成一旦客戶使用錯誤就報錯,沒報錯就是客戶使用正確。
以日期為例
這樣的設計沒有問題,但是客戶可能會 Date(30,3,1999),也就是 month 和 day 的順序反了,也有可能出現(xiàn) Date(2,30,2000) 這樣的錯誤(2月沒有30號)。該問題能夠出現(xiàn)是因為 day、month、year 都是 int 型,容易混淆,我們可以把 day、month、year 封裝為 struct ,這樣就不會出現(xiàn)順序混亂的錯誤
還可以通過用 “函數(shù)” 替換 “對象” 的方式來表示某個特定的月份
這里 Year 和 Day 并不需要如此設計,一是因為數(shù)量太多,枚舉太復雜,再者采用結(jié)構體封裝的方法已經(jīng)足夠了并不會犯其他錯誤。
保持接口的一致性
當我們設計多個類的時候,應當讓一些類的合理的操作保持一樣的接口,比如 STL 中的 vector 擁有 size(),其他容器如果擁有 size 是合理的那么也有一個 size 接口。不能對于 A 寫一個 size,對于 B 寫一個 length,這樣對于開發(fā)者來說記憶負擔加重,也毫無必要。
攜帶刪除器
我們使用指針的時候,使用 shared_ptr 會自帶一個刪除器,它的好處在于當我們在一段代碼中取得資源但是不需要釋放的時候,被其他代碼delete了,這樣會導致錯誤。有刪除器的話,會設置一個計數(shù)器,一個地方釋放資源并不會真正地將資源釋放,而是計數(shù)器減一,只有當真正計數(shù)器為0的時候資源才會被釋放。
標簽: