我們真正想要知道的是如何能夠使“smart pointer classes的行爲”在“與繼承相關的類型轉換”上,能夠和dumb pointers一樣。答案很簡單:不能夠。Daniel Edelson 指出:smart pointers雖然smart,卻不是pointers。是的,我們所能做的最好情況就是使用member templates來產生轉換函數,然後再在其中出現模棱兩可的時候使用轉型動作。這並不完美,但是夠好。Smart pointers提供了精巧的功能,而“必須使用轉型動作以避免模棱兩可”則是我們有時候必須付出的一個小代價。
下面看一下代碼,便一目瞭然: