我们真正想要知道的是如何能够使“smart pointer classes的行为”在“与继承相关的类型转换”上,能够和dumb pointers一样。答案很简单:不能够。Daniel Edelson 指出:smart pointers虽然smart,却不是pointers。是的,我们所能做的最好情况就是使用member templates来产生转换函数,然后再在其中出现模棱两可的时候使用转型动作。这并不完美,但是够好。Smart pointers提供了精巧的功能,而“必须使用转型动作以避免模棱两可”则是我们有时候必须付出的一个小代价。
下面看一下代码,便一目了然: