【45】運用成員函式模版接受所有相容型別

Andy Niu發表於2014-01-23

1、所謂智慧指標,就是資源管理類,行為像指標。因為要對不同的型別的指標進行封裝,所以智慧指標是類模版。

2、那麼問題來了。對於原始指標,支援隱式型別轉換,也就是說,父類指標可以指向子類指標。因此,我們當然期望,父類智慧指標可以指向子類智慧指標,但是,不同Base和Derived例項化出來的智慧指標,是不同的型別,之間沒有任何關係,更談不上繼承關係,肯定不能賦值。

3、怎麼解決呢?

  提供一個成員方法模版,對相容的型別進行構造或者賦值。也就是copy構造模版和copy賦值模版。

4、這裡出現了一個問題,以copy構造模版為例,當copy構造模版的形參與類模版的形參一致,那麼就退化為普通的copy構造,和使用者定義(或者編譯器生成)的一樣了,這不就重複了嗎?

  成員方法模版並不改變語言規則。也就是說,當前存在copy構造模版,如果使用者沒有定義copy構造,編譯器還是會自動生成一個copy構造,copy賦值也是一樣的道理。可以這樣認為:成員方法模版的模版形參U 不等於類模版的模版形參T。

相關文章