当前位置: 首页 > news >正文

《Effective C++》条款15

在资源管理类中提供对原始资源的访问

class A
{...
};
int day(const A* ptr)
{...
}
int main()
{shared_ptr<A> ptr(new A);cout << day(ptr) << endl;
}

这样写是错误的。因为day函数要求的参数是指针,而你传的实际上是一个对象。

如何解决呢? 

cout << day(ptr.get()) << endl;

调用了智能指针提供的get()函数就可以显示转换类型。

但是显示转换却显得异常麻烦,所以我们需要隐式转换,这样对于用户而言会更方便一点。

 隐式类型转换

为什么建议用隐式类型转换?

class A
{
public:};
class B
{
public:A get(){return a;}
private:A a;
};

以上是显示类型转换函数,没有问题,但是麻烦的是每次都得调用get,显得不方便,所以建议使用隐式类型转换:

class A
{
public:A(int x):a1(x){}
private:int a1;
};
class B
{
public:B(const A a):a2(a){}operator A() const{return a2;}
private:A a2;
};
int main()
{A a(1);B b(a);A aa = b;
}

http://www.lryc.cn/news/233616.html

相关文章:

  • CTFd-Web题目动态flag
  • 系列九、对象的生命周期和GC
  • spark 窗口滑动用于在不同的数据块之间执行操作
  • 【数据结构】栈与队列的实现
  • HCL设备启动失败——已经解决
  • RabbitMQ的幂等性、优先级队列和惰性队列
  • Uniapp-小程序自定义导航栏
  • 云课五分钟-08安装Opera成功-仓库中查找对应版本
  • 设计师的好帮手!在线PS网页版工具让创意无限发挥!
  • Android Glide加载transform CenterCrop, CircleCrop ShapeableImageView圆形图并描边,Kotlin
  • 【docker启动的Jenkins时,遇到时区问题处理】
  • MySQL8.0学习笔记
  • 初始MySQL(七)(MySQL表类型和存储引擎,MySQL视图,MySQL用户管理)
  • Redis 配置文件信息中文翻译版
  • React项目首页中用canvas实现星空
  • flutter ios Exception : No Impeller Context is Available
  • [PHP]写个简单的分页静态接口用宝塔部署到Nginx
  • 表单提交是
  • Qt的委托代理机制
  • OpenCV入门5——OpenCV的算术与位运算
  • 好用的开源项目地址
  • 深度学习(五)softmax 回归之:分类算法介绍,如何加载 Fashion-MINIST 数据集
  • 单稳态中间继电器\UEG/A-2H/220V 8A导轨安装 JOSEF约瑟
  • 2311rust到20版本更新
  • 基于Spring、SpringMVC、MyBatis的漫画网站
  • MySQL数据库八股文
  • 利用WebSocket +MQ发送紧急订单消息,并在客户端收到消息的用户的页面自动刷新列表
  • R语言——taxize(第一部分)
  • 【Spring Cloud】黑马头条 用户服务创建、登录功能实现
  • 聚观早报 |英伟达发布H200;夸克发布自研大模型