more effective c++智能指针继承传递(35) 发表于 2014-09-02 | 分类于 书籍 先看示例:++123456789101112131415161718192021222324class MusicProduct;class Cassette : public MusicProduct;class CD : public MusicProduct;void DisplayAndPlay(const SmartPtr<MusicProduct>& pmp, int times)SmartPtr<Cassette> f(new );SmartPtr<CD> fd(new );DisplayAndPlay(f, 10)DisplayAndPlay(fd, 10);这样是无法通过的,解决方法是使用智能隐式转换。为SmartPtr添加转换函数templatee<class newType>operator SmartPtr<newType>(){ return SmartPtr<newType>(pointee);}分析:编译器总是会企图找到一种方式使成功。所以函数赋值时,它就会解析为:SmartPtr<Cassette>::operator SmartPtr<MusicProduct> () { return Smart<MusicProduct>(pointee);}