在这篇文章中

d3d(Direct X)中的com技术详解_杀神李的博客-CSDN博客

我们已经学会了d3d中的com技术,现在让我们继续学习comptr

上文中我们说到,所有基于com技术的类都必须继承基类IUnknown,该类中有三个接口

AddRef():增加引用计数

Release():减少引用计数

QueryInterface():用来检查是否可以做向下转型的

但是新版的C++都提倡使用RAII管理内存,即通过临时对象,构造的时候申请内存,析构的时候自动释放所申请的内存,而不需要程序员手动使用如delete IUnknown中的Release等函数来释放内存

Tips:智能指针便是这种思想

所以微软也推出了专门基于com技术的智能指针,名字叫做comptr,让你能够用对象来管理申请的内存资源,这个指针就是 Microsoft::WRL::ComPtr

熟悉智能指针的小伙伴其实很快就能上手 接下来让我们来看看他的接口

方法 描述
ComPtr::Get 该方法返回T*,并且不会触发引用计数加1,常用在COM组件接口的函数输入
ComPtr::GetAddressOf 该方法返回T**,常用在COM组件接口的函数输出
ComPtr::Reset 该方法对里面的实例调用Release方法,并将指针置为nullptr
ComPtr::ReleaseAndGetAddressOf 该方法相当于先调用Reset方法,再调用GetAddressOf方法获取T**,常用在COM组件接口的函数输出,适用于实例可能会被反复构造的情况下
ComPtr::As 一个模板函数,可以替代IUnknown::QueryInterface的调用,需要传递一个ComPtr实例的地址

所以,基于ComPtr管理内存后,我们的初始化代码就可以写成如下形式了:

   Microsoft::WRL::ComPtr<ID3D12Device> md3dDevice;D3D12CreateDevice(pWarpAdapter.Get(),D3D_FEATURE_LEVEL_11_0,__uuidof(ID3D12Device),md3dDevice.GetAddressOf());
//不用手动释放内存,接下来可以直接使用md3dDevice进行接口调用了

d3d(Direct X)中的comptr技术详解相关推荐

  1. d3d(Direct X)中的com技术详解

    本文不会对Com进行非常详细的分析 因为这个技术分析起来难度还是非常大的 要想真正弄懂还是非常困难的 我只会针对d3d中使用到的com技术和comptr技术进行说明 所以看完本文后 可以熟练使用d3d ...

  2. 深度学习中的正则化技术详解

    目录 基本概念 1. 参数范数惩罚 1.1 \(L^2\)正则化 1.2 \(L^1\)正则化 1.3 总结\(L^2\)与\(L^1\)正则化 2. 作为约束的范数惩罚 3. 欠约束问题 4. 数据 ...

  3. php中会话技术,php session会话技术详解

    会话技术详解 发布时间-04-来源:青锋建站作者:青锋建站 PHP中的会话支持是在并发访问时由一个方法来保存某些数据,被广泛用于保持会话状态,存储会话变量.以下是青锋建站给大家分享的有关技术的详解,包 ...

  4. 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了

    摘自:https://mp.weixin.qq.com/s/OZnnuA31tEaVt0vnDOy5hQ 作为SLAM中最常用的闭环检测方法,视觉词袋模型技术详解来了 原创 小翼 飞思实验室 今天 基 ...

  5. 【H.264/AVC视频编解码技术详解】八、 熵编码算法(2):H.264中的熵编码基本方法、指数哥伦布编码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  6. P2P技术详解(二):P2P中的NAT穿越(打洞)方案详解

    目录 1.内容概述 2.反向链接技术:一种特殊的P2P场景(通信双方中只有一方位于NAT设备之后) 3.基于UDP协议的P2P打洞技术详解 3.1.原理概述 3.2.典型P2P情景1: 两客户端位于同 ...

  7. VXLAN中EVPN技术详解(二)——EVPN与VXLAN分布式网关

    今天继续给大家介绍VXLAN技术,本文主要内容是EVPN技术的主要应用--VXLAN分布式网关.本文从VXLAN分布式网关实现的角度,对EVPN的实现进行了详细的讲解. 阅读本文,您需要有一定的VXL ...

  8. GPU虚拟化技术详解

    GPU虚拟化技术详解 GPU英文名称为Graphic Processing Unit,GPU中文全称为计算机图形处理器,1999年由NVIDIA公司提出. 一.GPU概述 GPU这一概念也是相对于计算 ...

  9. Miracast技术详解(一):Wi-Fi Display

    Miracast概述 Miracast Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准.支持此标准的消费性电子产品(又称3C设备 ...

最新文章

  1. 蒙特卡洛算法贡献者之一Arianna Rosenbluth逝世 | AI日报
  2. sicily 1082. MANAGER
  3. 可变数组集合ArrayList
  4. 百度关闭新闻源背后的13个趋势风口
  5. 用户设置个人资料时,是否需要一个清空选项?
  6. nginx反向代理tomcat
  7. 给楠哥准备的入门单片机
  8. 移动端touch实现下拉刷新
  9. 传统IO与NIO的区别
  10. css基础知识汇总7
  11. vue监听数组元素属性的变化_为什么Vue3.0不再使用defineProperty实现数据监听?
  12. csv datatable 乱码 导出_C#将DataTable导出到csv文件
  13. 用CAD看图软件查找文字需要怎么做
  14. 用代码实现通过人人网的登录
  15. DS18B20单总线协议
  16. el-scrollbar 优化滚动条样式
  17. php清除垃圾代码,批处理清理系统垃圾代码,简单快速实用(适用于xp win7)
  18. 计算机组成原理第二章笔记---计算机进化与性能
  19. ChatGPT 常见错误原因及解决方案:报错、回答不完整、网络错误等
  20. informix数据库unload导出数据Load导入数据

热门文章

  1. jQuery ztree 自制一套 灰蓝皮肤
  2. 比尔·盖茨1978年写的古老程序曝光:IT人膜拜
  3. mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导
  4. 杨钦鸿:支付宝开放平台开发助手安装已中止,安装程序并未成功地运行完成该如何处理?
  5. vue 保留小数点厚一位_一位网瘾少女的不完全宅家掌上游戏体验
  6. java for循环中冒号作用
  7. 西少爷肉夹馍:小摊上的秘密
  8. SharePoint Online 列表modern UI手把手教程如何使用及问题
  9. Cesium 修改球体
  10. Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)