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

c++,标准库std中全局函数 _Destroy_in_place(...)的分析

(1)该函数的定义和位置如下:
在这里插入图片描述

可见,传入形参为某种类型的引用,该函数会执行形参的析构函数,还可以有效解决数组的连续析构。很强大的函数。
(2)疑问是,若形参是指针类型,该函数怎么执行,指针类型是没有析构函数的。
(3)举例,如下代码和实验结果:
在这里插入图片描述
可见,当该函数的形参是指针类型,没有析构和构造函数,该函数不执行具体的内容,什么也不做。
(4)我们可以以汇编代码跟踪一下,上面代码的反汇编代码如下:
在这里插入图片描述
如图,开始执行第22行代码,按F11 继续进入这个全局函数得汇编代码:
在这里插入图片描述
可见,当形参类型是指针时,该函数什么也没做。或者说指针类型是c++内置类型,c++编译器给指针类型规定的构造和析构函数中,就是没有任何代码,空函数体的。实际看汇编代码,根本就没有跳转,比如转至指针的析构函数执行。直接就ret返回了。这个奇怪现象,有别于真正的数据类型。也是本文探讨验证的初衷。以更多的了解该函数。
(5)该函数在vs2019上阅读STL源码时,频繁出现。有些数据结构里有指针类型的成员。STL总对指针调用_Destroy_in_place(…)。如图,举例是在单向链表forward_list 的源码中,在函数clear() 中。
在这里插入图片描述
在这里插入图片描述
如此,就解开了对指针应用该函数的疑惑,相当于什么也没做。谢谢阅读

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

相关文章:

  • java:Tomcat
  • US-P2F-R-C双线圈插头式比例阀放大器
  • clickhouse一次异常排查记录
  • Python 数据可视化:玩转 Matplotlib 的散点图、线形图、饼图和热力图
  • 基于python+pyqt实现opencv银行卡身份证等识别
  • 惠普台式机装系统记录
  • java八股文面试[JVM]——垃圾回收
  • iOS开发Swift-控制流
  • leetcode875. 爱吃香蕉的珂珂(java)
  • LeetCode-406-根据身高重建队列
  • JVM——类加载与字节码技术—编译期处理+类加载阶段
  • C#|如何调试进依赖动态库中
  • 全新版本QStack云管系统3.5.3 附详细安装教程
  • SLB 负载均衡
  • 多核调度预备知识
  • 什么是Git?解释Git的分布式版本控制系统的优势?
  • 软考高级系统架构设计师系列论文九十五:图书馆网络应用体系安全设计
  • qt 实现音视频的分贝检测系统
  • SSM框架和Spring Boot+Mybatis框架的性能比较?
  • 6个月的测试,来面试居然要18K,我一问连8K都不值
  • 优美而高效:解决服务器通信问题
  • C++模板的模板参数(五)
  • 基于jeecg-boot的flowable流程加签功能实现
  • day-03 基于TCP的服务器端/客户端
  • 匿名对象和一般对象的区别
  • [MyBatis系列⑥]注解开发
  • [ACL2023] Exploring Lottery Prompts for Pre-trained Language Models
  • 【Python编程】将同一种图片分类到同一文件夹下,并且将其分类的路径信息写成txt文件进行保存
  • 单例模式的相关知识
  • vue问题相关记录