《Effective C++》条款 45 成员函数模板接受所有兼容类型

智能指针能够很好的支持类型转换,以及多态的特性,那么智能指针是怎样做到和普通指针一样的功能的?
答案是利用成员函数模板。
如下代码:
在这里插入图片描述
在这里插入图片描述

我们希望上述的代码能够通过编译,也就是说我们的智能指针类需要实现一个对应版本的拷贝构造函数以及复制运算符重载,但是我们的基类有很多,因此对于这样的要求,相应的拷贝构造函数和复制运算符都应该是模板函数。因此智能指针的基本结构应该如下:
在这里插入图片描述

但是,我们的类型转换中并不允许将基类类的指针转换成为派生类,因此,我们应该有有效的机制防止这样转换发生 ,显然我们利用原始指针的转换关系就能完成这样需求。
在这里插入图片描述
如果我们传入得参数的原始指针不能转换为相应的接受智能指针的原始指针,那么编译器将会对上述构造函数的初始化报错。这样便有效的防止非法的转换。

成员函数模板的使用不仅仅用于构造函数实现基类和派生类之间的转换,也能用于相似类型的类间的转换,比如不同类型的智能指针。
在这里插入图片描述

成员函数模板和编译器生成的拷贝构造不能产生冲突,因此,我们编写相应的模板成员函数的同时,也要编写原本的默认的构造函数的重载。
如下为shared_ptr的实现:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值