2402com,com管理引用计数的规则

原文
使用引用计数管理对象生命期,允许多个客户无需相互协调就获取并释放单个对象.

只要客户对象遵守某些使用规则,就会有效管理该对象.这些规则指定了如何管理对象间的引用.(COM不指定对象内部实现,尽管这些规则是对象内策略的合理起点.)

从概念上讲,可按在包含所有保存接口指针的内部计算状态指针变量驻留,来对待接口指针.包括内存位置中,内部处理器寄存器中,及程序生成的变量和编译器生成的变量.

赋值或初化指针变量,涉及创建现有指针的新副本.如果某个变量中有个(赋值/初化)指针副本使用的值,则现在有两个.

变量自身析构一样,赋值指针变量,也会析构变量中的指针副本.(也即,析构变量所在的(如栈帧))

COM客户角度来看,总是对每个接口执行引用计数.客户绝不应假定,对所有接口,对象使用相同的计数器.

默认是,必须为接口指针每个新副本调用AddRef,且除非以下规则允许,必须对接口指针每个析构调用Release:

1,函数传入出(进出,inout)参数.当在参数上存储out值时,因为在调用Release释放它,来实现代码时,调用者必须在参数上调用AddRef.

2,全局变量.从全局变量中的指针的现有副本创建接口指针局部副本时,必须在局部副本上调用AddRef,因为在局部副本仍有效时,另一个函数可能会析构全局变量中的副本.

3,从"薄层"合成的新指针.使用特殊内部知识合成接口指针而不是从其他源接口指针函数,必须在新合成的指针,初始调用AddRef.
重要示例包括实例创建例程,QueryInterface实现等.
4,提取内部存储指针的副本.函数提取由调用对象内部存储指针的副本时,在函数返回前,该对象代码必须对指针调用AddRef.

提取指针后,原对象不能确定生命期与指针内部存储副本生命期的关系.

默认情况的唯一例外,要求管理代码知道,对象同一接口指针多个副本生命期关系,且只需通过禁止引用计数更改,来确保不会析构对象.

一般如下两种情况:

1,如果已存在指针的一个副本,在第一个副本仍存在时,随后又创建了稍后析构的第二个副本,则可省略调用第二个副本的AddRefRelease.

2,如果存在指针的一个副本并创建了第二个副本,然后在第二个副本前析构第一个副本,则可省略调用第二个副本的AddRef第1个副本的调用Release.

下面是具体示例,前两种情况特别常见:

1,函数的输入(in)参数中.用来初化值的指针,有按参数传递给函数接口指针副本,因此不需要对参数使用单独引用计数.

2,函数包括返回值输出(out)参数.要设置out参数,函数必须有接口指针稳定副本.返回时,调用者负责释放指针.因此,out参数不需要单独引用计数.

3,局部变量.方法实现控制栈帧上分配的每个指针变量的生命期,并可用它来确定如何省略冗余的AddRef/Release对.

4,后指针.某些数据结构包含两个互指对象的指针的对象.如果已知第一个对象的生命期包含第二个对象的生命期,则无需引用计数第二个对象的指向第1对象的指针.

一般,避免循环引用对维护适当的释放行为非常重要.但是,使用未计数指针时应格外小心,因为处理远程处理的操作系统部分无法了解此关系.

因此,最好让后指针看到第一个指针第二个"友元"对象(从而避免循环).如,COM可连接对象架构就是这样.

实现或使用引用计数对象时,应用人工引用计数也可能很有用,这样可保证函数处理过程中的对象稳定性.
实现接口方法时,可能会调用会减少对象引用计数的函数,从而导致过早释放对象从而失败.

可靠方法是在实现方法开头插入调用AddRef,并在方法返回前调用配对的Release.

有时,AddRefRelease返回值可能不稳定,不应依赖它;它们应仅用来调试或诊断.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/677063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础篇_修饰符(Decorators)【中】

上一篇:Python基础篇_修饰符(Decorators)【上】(decorator、classmethod、staticmethod) 下一篇:Python基础篇_修饰符(Decorators)【下】abc.abstractmethod、functools.singledispatch、contextlib.contex…

在面试中如何回复擅长vue还是react

当面试官问及这个问题的时候,我们需要思考面试官是否是在乎你是掌握vue还是react吗??? 在大前端的一个环境下,当前又有AI人工智能的加持辅助,我们是不是要去思考企业在进行前端岗位人员需求的时候&#xf…

骨科器械行业分析:市场规模为360亿元

骨科器械一般指专门用于骨科手术用的专业医疗器械。按国家食品药品监督局的分类划分常分为:一类;二类和三类。按照使用用途和性能主要分为骨科用刀、骨科用剪、骨科用钳、骨科用钩、骨科用针、骨科用刮、骨科用锥、骨科用钻、骨科用锯、骨科用凿、骨科用锉/铲、骨科…

Github 2024-02-04 开源项目日报 Top9

根据Github Trendings的统计,今日(2024-02-04统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6Ruby项目1HTML项目1C项目1Go项目1TypeScript项目1 Windows 终端、控制台和命令行存储库 创建周期…

数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)

数据库管理148期 2024-02-08 数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)1 性能主页2 ADDM Spotlight3 实时ADDM4 数据库的其他5 主机总结 数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208) 作者&am…

跨平台监控管理工具ServerBee

大年初一,给各位拜年,恭祝大家龙年大吉,新春快乐~! 本文是应网友 博茨瓦纳 的要求折腾的; 什么是 ServerBee ? ServerBee 是一款支持跨平台集监控、管理和终端的效率工具,支持 Linux 、Windows …

微信小程序 民宿预订租赁系统uniApp

通过山青水磨APP办理租房相关业务,线上解决预定、退订的业务,旅客在使用时更加灵活,实现了快速找房,在线沟通、便捷租赁等操作,除此以外,还能帮助旅客获取周边资讯、当地特色活动服务,提升旅客的…

并发、串行与同步、异步

怎么理解“一个程序并发执行,数据库连接对象只有一个时,只能同步”? 理解这个说法需要考虑并发执行和数据库连接对象的特性。 在一个面向对象程序中,并发执行通常意味着多个线程或进程同时执行程序的不同部分。数据库连接对象是…

KY134 最大报销额

ti 深搜&#xff08;有点类似板子&#xff09; //深搜回溯求最大和 //直接贪心取值无法ac&#xff0c;浮点数没法dp //把money都乘以100,小数点后两位映射到整数,就可以背包 #include<bits/stdc.h>using namespace std;#define db doubleint n, m; db sum; priority_que…

Bug地狱 #2 构建监控平台查看系统运行与SQL执行情况

补救 构建监控平台查看系统运行与SQL执行情况 关于系统的可观测性&#xff0c;有logs&#xff08;日志&#xff09;&#xff0c;traces&#xff08;跟踪&#xff09;&#xff0c;metrics&#xff08;指标&#xff09;。 系统频繁宕机&#xff0c;可能的原因有&#xff1a;1.慢…

9.7不同的二叉搜索树(LC96-M)

96. 不同的二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 算法&#xff1a; 看到这道题的时候有点懵&#xff0c;可以举几个例子&#xff0c;找规律 n为3的时候&#xff1a; 当1为头结点的时候&#xff0c;其右子树有两个节点&#xff0c;两个节点的布局&#xff0c; …

鸿蒙学习-module.json5配置文件

官网文档参考&#xff1a;文档中心 位于entry->src->main-module.json5 一、基础属性 {"module": {/*标识当前Module的名称&#xff0c;标签值采用字符串表示&#xff08;最大长度31个字节&#xff09;&#xff0c;该名称在整个应用中要唯一&#xff0c;仅支…

快速重启网络服务 IP Helper

有时候&#xff0c;因为需要配置虚拟机&#xff0c;又或者网络环境复杂的情况下。win10重启后&#xff0c;会造成网络服务失效。所以这时候需要重启网络服务。即重启IP Helper。每次 我的电脑->鼠标右键 管理->服务和应用程序->服务->IP Helper 右键重启&#xff0…

XGB-5: DART Booster

XGBoost 主要结合了大量的回归树和一个小的学习率。在这种情况下&#xff0c;早期添加的树是重要的&#xff0c;而晚期添加的树是不重要的。 Vinayak 和 Gilad-Bachrach 提出了一种将深度神经网络社区的 dropout 技术应用于梯度提升树的新方法&#xff0c;并在某些情况下报告了…

客观看待前后端分离,优劣、场景、对程序员职业的影响

前后端分离倡导多年了&#xff0c;现在基本成为了开发的主流模式了&#xff0c;贝格前端工场承接的前端项目只要不考虑seo的&#xff0c;都采用前后端分离模式。 一、在前端开发中&#xff0c;前后端分离是指什么 在前端开发中&#xff0c;前后端分离是一种架构模式&#xff…

机器学习系列——(二十)密度聚类

引言 在机器学习的无监督学习领域&#xff0c;聚类算法是一种关键的技术&#xff0c;用于发现数据集中的内在结构和模式。与传统的基于距离的聚类方法&#xff08;如K-Means&#xff09;不同&#xff0c;密度聚类关注于数据分布的密度&#xff0c;旨在识别被低密度区域分隔的高…

网络安全05-sql-labs靶场全网最详细总结

目录 一、环境准备&#xff0c;sql注入靶场环境网上全是保姆教程&#xff0c;自己搜搜&#xff0c;这个不进行描述 二、注入方式了解 三、正式开始注入闯关 3.1第一关&#xff08;字符型注入&#xff09; 3.1.1首先先测试一下字符 ​3.1.2尝试单引号闭合看输出什么 3.1.3…

mysql RR、RC隔离级别实现原理

事务隔离级别实现过程 快照读&#xff08;select语句&#xff09; 获取事务自己版本号&#xff0c;即事务 ID获取 Read View 查询得到数据&#xff0c;然后 Read View 中事务版本号进行比较。如果不符合 Read View 可见性规则&#xff08;看最新数据还是副本里的数据&#xf…

STM32F1 - 标准外设库_规范

STM32F10x_StdPeriph_Lib_V3.6.0 1> 头文件包含关系2> .c文件内部结构3> 宏定义位置4> 位掩码bit mask5> .c文件中定义私有变量6> 枚举类型定义 1> 头文件包含关系 1个头文件stm32f10x.h 就把整个MCU以及标准外设库&#xff0c;就管理了&#xff1b; 2>…

101. 对称二叉树 - 力扣(LeetCode)

题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 题目示例 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 解题思路 首先想清楚&#xff0c;判断对称二叉树要比较的是哪两个节点&#xff0c;要比较的可不是左右节点&#xff01; 对于…