條款四 避免不必要的默認構造函數(shù)
默認構造函數(shù)(指沒有參數(shù)的構造函數(shù))是指C++語言中,你不用傳參數(shù)就可以調用的構造函數(shù)。構造函數(shù)用于初始化對象,而默認構造函數(shù)可以在不依賴任何外部信息的情況下創(chuàng)建對象。
在一個完美的世界里,無需任何外部信息即可創(chuàng)建對象的類可以包含默認構造函數(shù),而需要額外信息來創(chuàng)建對象的類則不包含默認構造函數(shù)。可是我們的世界是不完美的,所以我們必將一些額外的因素考慮在內。特別地,如果一個類沒有默認構造函數(shù),使用這個類的時候就會有一些限制。
沒有默認構造函數(shù),在三種情況下它的應用可能會出現(xiàn)問題:
第一個問題是創(chuàng)建數(shù)組的時候,通常沒有很好的辦法可以指定數(shù)組元素的構造函數(shù)的參數(shù)。
第二個問題是沒有默認構造函數(shù)的類他們無法作為許多基于模板的容器類的類型參數(shù)使用。因為通常用于實例化模板的哪些類型需要提供默認構造函數(shù)。
第三個問題是在有虛基類的時候應該提供默認構造函數(shù)還是不提供默認構造函數(shù)。沒有默認構造函數(shù)的虛基類使用起來很痛苦,這是因為虛基類的構造函數(shù)所要求的參數(shù)必須由創(chuàng)建對象所屬的最遠的派生類所提供。
正因為這些強加于沒有默認構造函數(shù)的類上的重中限制,一些人認為所有的類都應該有默認構造函數(shù),即使默認構造函數(shù)沒有足夠的信息來完全初始化一個對象。
但是默認構造函數(shù)會影響類的運行效率,有時會使其他成員函數(shù)變得復雜。
如果一個類的構造函數(shù)能夠確保所有的數(shù)據(jù)成員被正確初始化,就能避免付出一些代價。通常默認構造函數(shù)不提供這些保證。如果默認構造函數(shù)對于某些類沒有太大意義,最好避免使用他們。這給使用這種類加了一些限制,但是當你使用它時,它可以向你保證你能很放心地相信這個類被正確得初始化,并且具有高效的效率。
說實話,這一章節(jié)我看得不是很明白。
作者在一開始,列舉了一些沒有默認構造函數(shù)我們可能遇到的問題,在這些問題下,進而得出默認構造函數(shù)所帶來的一些效率和代價困擾。看來還需要在實踐中仔細揣摩揣摩。
posted on 2009-09-22 13:33
Sandy 閱讀(549)
評論(0) 編輯 收藏 引用 所屬分類:
c++學習