delphi - Tobject内存地址保留/释放
问题描述
假设我有一个 TMyobject 的实例
MyObjectA := TMyObject.create
我们可以说 MyObjectA 是内存中的一个地址。现在如果我这样做
MyObjectA.free
通常 MyObjectA 仍然是内存中的地址,但该地址处的内存不再保留,这就是为什么有时做 MyObjectA.aProperty 仍然有效
现在如果我这样做
MyObjectB := TMyObject.create
是什么禁止系统将 MyObjectA 先前使用的内存地址提供给 MyObjectB ?并且以这种方式有可能在执行 MyObjectB := TMyObject.create 之后 MyobjectA 变得有效?
解决方案
没有什么可以“禁止”内存管理器立即为 MyObjectB 重新使用之前由 MyObjectA 占用的内存。
没有办法(除非使用定制设计的内存管理器)可以阻止它(或强制它)这样做。
然而,这并不意味着 MyObjectA 突然变得比分配 MyObjectB 之前更“有效”。MyObjectA 的内容已经被MyObjectB 的内容(实例)彻底覆盖,因此即使内存管理器立即将之前由 MyObjectA 占用的内存重新用于 MyObjectB,它也不会突然变得比以前更“有效”。本质上,你可以做同样的事情
MyObjectB := TMyObject.Create;
MyObjectA := MyObjectB;
IE。MyObjectA 只是成为 MyObjectB 的别名(如果内存被重用),但在这种情况下,MyObjectA 的原始内容将永远丢失。
推荐阅读
- amazon-web-services - 从 AWS 服务访问放置在 VPN 后面的 Rest Endpoint
- javascript - 视频标签未在 Safari 中加载
- r - 需要解决的范围问题
- c# - C#。在达到 5 次失败尝试后,消息“您已用完猜测!它是数字”+ 数字永远不会显示,我需要帮助。谢谢
- azure-devops - Azure 管道自托管代理 - 是否应该有单独的用户来构建和部署?
- mysql - SQL:只要有 5 的倍数就增加一个新列,否则不要
- c# - PowerPDF API - 将 VB 代码转换为 C# - 错误 HRESULT E_FAIL
- python - 在python中将数据提取到矩阵或numpy数组中的有效方法
- scala - 如何解决不同版本的传递依赖?
- c++ - 在程序中找到最小的变量?