1、所谓智能指针,就是资源管理类,行为像指针。因为要对不同的类型的指针进行封装,所以智能指针是类模版。
2、那么问题来了。对于原始指针,支持隐式类型转换,也就是说,父类指针可以指向子类指针。因此,我们当然期望,父类智能指针可以指向子类智能指针,但是,不同Base和Derived实例化出来的智能指针,是不同的类型,之间没有任何关系,更谈不上继承关系,肯定不能赋值。
3、怎么解决呢?
提供一个成员方法模版,对兼容的类型进行构造或者赋值。也就是copy构造模版和copy赋值模版。
4、这里出现了一个问题,以copy构造模版为例,当copy构造模版的形参与类模版的形参一致,那么就退化为普通的copy构造,和用户定义(或者编译器生成)的一样了,这不就重复了吗?
成员方法模版并不改变语言规则。也就是说,当前存在copy构造模版,如果用户没有定义copy构造,编译器还是会自动生成一个copy构造,copy赋值也是一样的道理。可以这样认为:成员方法模版的模版形参U 不等于类模版的模版形参T。