C++对象模型-在对象模型的尖端 第七章笔记

读完C++对象模型书后,做一个笔记整理
第一章-关于对象
第二章-构造函数语义学
第三章-Data语义学
第四章-Function语义学
第五章-构造拷贝解析语义学
第六章-执行期语义学
第七章-在对象模型的尖端

template

  • 编译器看到template class声明时什么也不会做。必须经过具现后才能使用其中变量。
  • 若声明一个template class具现类型的指针后,也是什么也没有。因为指针不需要触发对象的具现。
  • 如果一个virtual function 被具现出一其具现点紧跟在其class具现点之后

异常处理

  • throw语句会抛出内建类型或自定义类型的异常

  • catch子句用于处理某种类型的异常,在大括号中提供处理程序

  • try子句包含着可能抛异常的代码

  • 异常触发后,控制权会从函数调用中被释放,此时堆栈中每个调用函数都将推离unwinding the stack,推离前局部对象变量会析构。随后进行到程序栈的下一个函数中去继续运行。

  • 在异常触发后,若之前有资源的加锁操作,并不会自动释放。需手动处理,或利用局部对象的析构来自动完成资源锁的释放。

Runtime Type Identification RTTI

  • RTTI对那些展现多态的类型有效,一般是在虚函数表中第一个位置放置指向RTTI的指针
  • 对于指针可以 xx* ptr= dynamic_cast<xx*>(tmp);返回0则代表转换失败,非0为成功。
  • 对于引用fct& rf=dynamic_cast<fct&>(rt);若失败会抛出bad_cast_exception的异常
  • 对于内建类型和非多态类型type_info是静态取得,而非执行期获得。且是在需要时才产生。

在DLL变化后,二进制不兼容会要求必须重新编译使用者代码
如果DLL中含有虚函数,则除非每次DLL都被加载到相同内存位置(实际位置由runtime linker决定),否则虚函数将引发各种问题。因为在调用者代码中vtb中的虚函数地址是固定的。

下一篇 第一章-关于对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwao7890

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值