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

(delphi11最新学习资料) Object Pascal 学习笔记---第13章第3节 (弱引用是系统托管的 )

13.4.2 弱引用是系统托管的

​ 弱引用的托管是一个非常重要的内容。换句话说,系统会在内存中保存一个弱引用列表,当对象被销毁时,系统会检查是否有任何弱引用指向该对象,如果有,系统会将实际引用赋值为 nil,即实际外部引用指针等于 nil。这意味着弱引用会产生运行时成本。

​ 与传统的引用相比,托管的弱引用的好处是可以检查接口引用是否仍然有效(这意味着它所引用的对象已被销毁)。但这也意味着,在使用弱引用时,应始终在使用前测试它是否已被赋值。

private[weak] MySimple: IMySimpleInterface;

​ 还有一个按钮为该字段分配一个引用,并使用它,确保它仍然有效:

procedure TForm3.BtnGetWeakClick(Sender: TObject);
varMyComplex: IMyComplexInterface;
beginMyComplex := TMyComplexClass.Create;MyComplex.GetSimple.DoSomething(False);MySimple := MyComplex.GetSimple;
end;procedure TForm3.BtnUseWeakClick(Sender: TObject);
beginif Assigned(MySimple) thenMySimple.DoSomething(False)elseLog('Nil weak reference');
end;

​ 除非修改代码,否则 "if Assigned "测试将失败,因为第一个按钮事件处理器会创建并立即释放对象,这样弱引用就会变成 nil(因为它现在无效)。但由于弱引用是托管的,编译器会帮助你跟踪它的真实状态(与对象引用不同)。

13.4.3 Unsafe属性

​ 在某些非常特殊的情况下(例如在创建实例时),函数可能会返回一个引用计数为零的对象。在这种情况下,为了避免编译器立即删除该对象(在它有机会被赋值给变量之前,这样它的引用计数就会增加到 1),我们必须将该对象标记为不安全对象。

​ 这意味着必须暂时忽略对象的引用计数,以使代码安全。这种行为是通过使用新的特定属性 [Unsafe] 来实现的,只有在非常特殊的情况下才需要使用这种特性。

​ 语法如下:

pascalCopy codevar[Unsafe] Intf1: IInterface;[Result: Unsafe] function GetIntf: IInterface;

​ 在通用库中实现构造模式(如工厂模式)时,使用该属性是有意义的。

注解:为了支持现在已废弃的ARC内存模型,System单元使用了一个unsafe指令,因为它无法在属性定义之前(同一单元的稍后部分)使用该属性。在该单元之外的任何代码中都不应该使用该指令,而且现在也不再使用了(你可以在 $IFDEF 指令中看到它)。

相关文章:

(delphi11最新学习资料) Object Pascal 学习笔记---第13章第3节 (弱引用是系统托管的 )

13.4.2 弱引用是系统托管的 ​ 弱引用的托管是一个非常重要的内容。换句话说,系统会在内存中保存一个弱引用列表,当对象被销毁时,系统会检查是否有任何弱引用指向该对象,如果有,系统会将实际引用赋值为 nil&#xff0…...

安装WordPress

第 1 步:下载并解压 wget https://wordpress.org/latest.tar.gz 然后使用以下命令提取包: tar -xzvf latest.tar.gz 第 2 步:创建数据库 比如数据库名称为wordpress,编码格式为 utf8mb4_general_ci 第 3 步:设置wp-con…...

【STL库源码剖析】list 简单实现

从此音尘各悄然 春山如黛草如烟 目录 list 的结点设计 list 的迭代器 list 的部分框架 迭代器的实现 容量相关相关函数 实现 insert 在指定位置插入 val 实现 push_back 在尾部进行插入 实现 erase 在指定位置删除 实现 pop_back 在尾部进行删除 实现 list 的头插、头删 实现…...

web前端框架设计第十一课-常用插件

web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药,犹豫拖延将不断滋养恐惧...

Java基础-注解

注解本质是继承了Annotation接口的一个接口 首先,我们通过键值对的形式可以为注解属性赋值,像这样:Hello(value “hello”)。 接着,你用注解修饰某个元素,编译器将在编译期扫描每个类或者方…...

SpringCloud之SSO单点登录-基于Gateway和OAuth2的跨系统统一认证和鉴权详解

单点登录(SSO)是一种身份验证过程,允许用户通过一次登录访问多个系统。本文将深入解析单点登录的原理,并详细介绍如何在Spring Cloud环境中实现单点登录。通过具体的架构图和代码示例,我们将展示SSO的工作机制和优势&a…...

二分查找算法详讲(三种版本写法)原创

介绍: 二分查找算法(Binary Search)是一种在有序数组中查找目标元素的算法。 它的基本思想是通过将目标元素与数组的中间元素进行比较,从而将搜索范围缩小一半。 如果目标元素等于中间元素,则搜索结束;如果目标元素小…...

Git钩子(Hooks)之commit之前自动执行脚本

介绍 官方文档: 英文:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks中文:https://git-scm.com/book/zh/v2/自定义-Git-Git-钩子 下面只复制了pre-commit部分文档,其他详见官方文档。 Git Hooks Like many other…...

nano机器人2:机械臂的视觉抓取

前言 参考链接: 【机械臂入门教程】机械臂视觉抓取从理论到实战 GRCNN 通过神经网络,先进行模型训练,在进行模型评估。 机械臂逆运动学求解 所有串联型6自由度机械臂均是可解的,但这种解通常只能通过数值解法得到,计算难度大&am…...

技术速递|宣布 Java on Azure 开发工具支持 Java on Azure Container Apps

作者:Jialuo Gan 排版:Alan Wang 在 Microsoft Build 2024 期间宣布,Azure Container Apps 现在可为 Java 开发人员提供丰富的操作功能。(详细内容请参见本博客)。 我们很高兴地与大家分享,Azure Toolkit for Intelli…...

随机森林算法实现分类

随机森林算法实现对编码后二进制数据的识别 1.直接先上代码! import numpy as np import pandas as pd from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import …...

Ubuntu卸载软件

在删除这些目录之前,你必须确定一个非常重要的事情:确认没有任何服务正在使用这些版本的 PHP。如果你删除了正在使用的 PHP 版本的扩展目录,那么依赖于这个版本的 PHP 的网站或服务可能会停止工作。 如果你确定某个版本的 PHP 没有在使用中&…...

网络工程师:网络可靠性技术

一、可靠性 平均故障间隔时间MTBF(Mean Time Between Failure)和平均修复时间MTTR(Mean Time to Repair)这两个指标来评价系统的可靠性。 1、平均故障间隔时间MTBF MTBF是指一个系统无故障运行平均时间,通常以小时为单位。MTBF越大可靠性越高。 2、平均修复时间MTTR…...

科技引领未来:高速公路可视化

高速公路可视化监控系统利用实时视频、传感器数据和大数据分析,通过图扑 HT 可视化展示交通流量、车速、事故和路况信息。交通管理人员可以实时监控、快速响应突发事件,并优化交通信号和指挥方案。这一系统不仅提高了道路安全性和车辆通行效率&#xff0…...

Golang发送POST请求并传递JSON数据

客户端 package mainimport ("c02_get_param/common""fmt""zdpgo_resty" )func main() {// Create a Resty Clientclient : zdpgo_resty.New()// 设置字符串resp, err : client.R().SetHeader("Content-Type", "application/jso…...

C++实现生产者消费者模型

生产者-消费者模型是一种典型的多线程并发模式,常用于在一个共享缓冲区中协调生产者和消费者之间的数据传递。在C中,我们可以使用标准库中的线程、互斥量和条件变量来实现该模型。以下是一个简单的生产者-消费者模型的实现示例: #include &l…...

【Mac】MWeb Pro(好用的markdown编辑器) v4.5.9中文版安装教程

软件介绍 MWeb Pro for Mac是一款Mac上的Markdown编辑器软件,它支持实时预览,语法高亮,自动保存和备份等功能,并且有多种主题和样式可供选择。此外,MWeb还支持多种导出格式,包括HTML、PDF、Word、ePub等&a…...

C++ | Leetcode C++题解之第118题杨辉三角

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> ret(numRows);for (int i 0; i < numRows; i) {ret[i].resize(i 1);ret[i][0] ret[i][i] 1;for (int j 1; j &…...

3D透视图转的时候模型闪动怎么解决?---模大狮模型网

在3D建模与渲染的世界中&#xff0c;透视图是我们观察和操作模型的重要窗口。然而&#xff0c;有时候在旋转透视图时&#xff0c;模型会出现闪动的现象&#xff0c;这不仅影响了我们的工作效率&#xff0c;还可能对最终的渲染效果产生负面影响。本文将探讨这一问题的成因&#…...

如何创建一个vue项目?详细教程,如何创建第一个vue项目?

已经安装node.js在自己找的到的地方新建一个文件夹用于存放项目&#xff0c;记住文件夹的存放路径&#xff0c;以我为例&#xff0c;我的文件夹路径为D:\tydic 打开cmd命令窗口&#xff0c;进入刚刚的新建文件夹 切换硬盘&#xff1a; D: 进入文件夹&#xff1a;cd tydic 使…...

S2-Pro数据库课程设计助手:从需求分析到SQL生成的全程辅助

S2-Pro数据库课程设计助手&#xff1a;从需求分析到SQL生成的全程辅助 1. 课程设计的痛点与解决方案 每到学期末&#xff0c;数据库课程设计就成了计算机专业学生的"必修课"。面对一个陌生的业务场景&#xff0c;从零开始梳理需求、设计E-R图、编写SQL语句&#xf…...

EmbeddingGemma-300m效果展示:多语言文本相似度计算实战

EmbeddingGemma-300m效果展示&#xff1a;多语言文本相似度计算实战 1. 引言 文本嵌入模型正在改变我们处理多语言内容的方式。想象一下&#xff0c;你有一个包含中文、英文、法文等多种语言的文档库&#xff0c;如何快速找到语义相似的内容&#xff1f;传统的关键词匹配方法…...

Pixel Couplet Gen应用场景:微信小程序开发者如何复用像素皇城UI组件

Pixel Couplet Gen应用场景&#xff1a;微信小程序开发者如何复用像素皇城UI组件 1. 项目背景与价值 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的创新应用。作为微信小程序开发者&#xff0c;您可以直接复用其UI组件库&#xff0c;快速构建具有以下特点的应…...

Phi-3-mini-4k-instruct-gguf实操手册:短问答/改写/摘要三大高频场景落地

Phi-3-mini-4k-instruct-gguf实操手册&#xff1a;短问答/改写/摘要三大高频场景落地 1. 模型简介与核心能力 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型&#xff0c;基于Phi-3系列优化而来。这个GGUF版本特别适合处理短文本任务&#xff0c;具有以下特点&a…...

图图的嗨丝造相-Z-Image-Turbo效果对比:8bit vs 16bit精度推理对渔网袜边缘锐度的影响

图图的嗨丝造相-Z-Image-Turbo效果对比&#xff1a;8bit vs 16bit精度推理对渔网袜边缘锐度的影响 1. 引言&#xff1a;当AI绘画遇上“渔网袜”细节 最近在玩一个挺有意思的AI绘画模型——图图的嗨丝造相-Z-Image-Turbo。这个模型专门针对“大网渔网袜”这种特定服饰的生成做…...

弦音墨影保姆级教程:解决‘视频加载失败’‘墨迹不跟随目标’等10类高频问题

弦音墨影保姆级教程&#xff1a;解决‘视频加载失败’‘墨迹不跟随目标’等10类高频问题 1. 系统简介与核心价值 「弦音墨影」是一款将人工智能技术与传统美学完美融合的视频分析工具。它采用水墨丹青的视觉风格&#xff0c;通过先进的Qwen2.5-VL多模态技术&#xff0c;让视频…...

数字孪生通信层开发:C#实现OPC UA到Unity3D的实时数据映射(2026年工业级实战指南)

引言&#xff1a;通信层不是“锦上添花”&#xff0c;而是“数字孪生的血脉” 在2026年的工业数字孪生战场上&#xff0c;OPC UA到Unity3D的数据映射延迟是决定孪生体“活”与“死”的关键。IDC 2026年工业物联网报告显示&#xff1a;76%的数字孪生项目因通信层延迟>100ms失…...

FlowState Lab结合计算机网络概念:模拟智能网络配置助手

FlowState Lab结合计算机网络概念&#xff1a;模拟智能网络配置助手 1. 网络运维的痛点与AI解决方案 网络工程师每天都要面对复杂的网络环境和层出不穷的故障问题。传统排错流程往往需要工程师手动检查设备配置、分析日志信息、查阅技术文档&#xff0c;这个过程耗时耗力且容…...

Qwen3.5-2B图文理解评测:在TextVQA、ChartQA等基准测试中的轻量级SOTA表现

Qwen3.5-2B图文理解评测&#xff1a;在TextVQA、ChartQA等基准测试中的轻量级SOTA表现 1. 模型概览 Qwen3.5-2B是Qwen3.5系列中的轻量化多模态基础模型&#xff0c;仅有20亿参数规模&#xff0c;却展现出超越参数量的强大图文理解能力。该模型专为低功耗、低门槛部署场景设计…...

3个理由让你选择DeepSeek-Coder-V2:免费开源的AI编程助手

3个理由让你选择DeepSeek-Coder-V2&#xff1a;免费开源的AI编程助手 【免费下载链接】DeepSeek-Coder-V2 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder-V2 从代码效率低下到开发流程革新的完整路径 在当今快节奏的软件开发环境中&#xff0c;开…...