起源
Reference Count模式是一种相对简单,但实用性很强,比如COM中的引用记数就是COM生命周期控制的基础,同样也是Observer模式(详细请见Observer模式)的生命周期的基础。
目的<o:p></o:p>
利用Reference Count的模式来控制对象的生命周期。对于引用记数中对象将是可利用的对象,否则对象将析构自身。<o:p></o:p>
动机
Reference Count模式的基础与Lock的基础很相类似。唯一不同的是Lock预先定义、固定的。它的具体的类的应用时也与Lock模式类似。Reference Count模式默认一种行为方法:SetReferenced,同样当具体使用些模式时,你可以创建自己习惯的方法。如
<o:p></o:p>
Reference Count模式在singleton模式中会有比较好的应用。<o:p></o:p>
应用
unit ReferenceCount;<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
<o:p></o:p>
TRefCountSample = class (TObject)<o:p></o:p>
private<o:p></o:p>
FReferenceCnt: Integer;<o:p></o:p>
protected<o:p></o:p>
function Referenced: Boolean;<o:p></o:p>
procedure SetReferenced(IsReferenced: Boolean);<o:p></o:p>
public<o:p></o:p>
procedure AddReference;<o:p></o:p>
procedure RemoveReference;<o:p></o:p>
end;<o:p></o:p>
<o:p></o:p>
{<o:p></o:p>
*******************************TRefCountSample*******************************<o:p></o:p>
}<o:p></o:p>
procedure TRefCountSample.AddReference;<o:p></o:p>
begin<o:p></o:p>
Inc(FReferenceCnt);<o:p></o:p>
if FReferenceCnt = 1 then SetReferenced(True);<o:p></o:p>
end;<o:p></o:p>
<o:p></o:p>
function TRefCountSample.Referenced: Boolean;<o:p></o:p>
begin<o:p></o:p>
Result := (FReferenceCnt <> 0);<o:p></o:p>
end;<o:p></o:p>
<o:p></o:p>
procedure TRefCountSample.RemoveReference;<o:p></o:p>
begin<o:p></o:p>
Dec(FReferenceCnt);<o:p></o:p>
if FReferenceCnt = 0 then SetReferenced(False);<o:p></o:p>
end;<o:p></o:p>
<o:p></o:p>
procedure TRefCountSample.SetReferenced(IsReferenced: Boolean);<o:p></o:p>
begin<o:p></o:p>
if not Referenced then Free;<o:p></o:p>
end;<o:p></o:p>
Delphi实例:IUnknown
IUnknown = interface<o:p></o:p>
['{00000000-0000-0000-C000-000000000046}']<o:p></o:p>
…<o:p></o:p>
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;<o:p></o:p>
function _AddRef: Integer; stdcall;<o:p></o:p>
function _Release: Integer; stdcall;<o:p></o:p>
end;<o:p></o:p>
分享到:
相关推荐
Reference count Weak References Reference counts and cycles Object properties Accessing multiple properties at once The GObject messaging system Closures C Closures non-C closures (for the ...
标题“msm_gpiomux.rar_The Count”暗示了我们正在处理与高通(Qualcomm)MSM(Mobile Station Modem)平台相关的GPIO复用(GPIO muxing)技术,特别是关于GPIO引用计数(reference counting)的部分。描述中提到的...
Decrement the reference count of an anon page. If reference count goes to zero, free it and its associated page (if any).
GObject参考计数调试器(以下简称Refdbg)是一款专为解决GObject、GTK+以及Gnome应用程序中的引用计数错误而设计的开源工具。在理解Refdbg之前,我们需要先了解什么是GObject,以及引用计数在面向对象编程中的重要性...
当类中有指针成员时,一般有两种方式...智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象。
它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为...
在C++编程中,"SmartPtr_Reference_Count"这个主题涉及到智能指针(Smart Pointer)的实现,特别是关于引用计数(Reference Counting)的技术。在《More Effective C++》这本书的条款29中,作者Scott Meyers探讨了...
文件还讨论了文件系统,如文件引用计数(file-reference count)的用途,这是用来计算指向文件的链接数以及有多少进程在访问该文件。Unix系统中,文件属性是存储在索引节点(i-node)中,而不是目录或目录项中。 最后,...
一个引用计数(reference count),用于跟踪对这个对象的引用数量,确保在所有使用它的代码都释放引用后,才能安全地删除该对象。此外,kobject还有一个指向其父对象的指针,这样可以构建起一个层级结构,如设备树;...
4. **引用计数算法**(Reference Count GC Algorithm):通过记录每个对象的引用数量来判断对象是否可回收。 #### JVM内存热点与代际垃圾回收 1. **热点**:频繁执行的代码片段,通常用于优化编译器的优化目标。 2...
Rust 的 `Arc`(Atomic Reference Count) 类型提供了一种解决方案,它可以安全地跨多个线程共享可变数据。`Arc` 使用引用计数来跟踪有多少个引用指向同一个对象,只要还有引用存在,对象就不会被释放。然而,使用 `...
`ReferenceCount`是Netty中用于管理缓冲区引用计数的机制,确保资源在不再使用时能够被及时释放。 #### 接口ReferenceCounted 定义了对象引用计数的行为。 #### 类AbstractReferenceCountedByteBuf 这是一个实现了...
而在Objective-C中,使用alloc方法创建的对象,它的引用计数(reference count)会自动增加1。为了管理内存,Objective-C提供了几个关键方法:retain、copy和release。当创建对象后,开发者必须在适当的时候调用...
文档提到ModelMaker6.2支持八种设计模式,分别是Visitor、Observer、Wrapper、Singleton、Mediator、Decorator、ReferenceCount和Lock。这些模式都是基于经典的《Design Patterns: Elements of Reusable Object-...
devobj命令并加上设备对象的地址参数,调试器会输出该设备对象当前的状态信息,包括正在处理的IRP(I/O 请求包)、引用计数(reference count)、设备扩展(device extension)等。 !drvobj和!devobj只是众多Windbg...
/* reference count */ zend_uchar type; /* active type */ zend_uchar is_ref; /* is it a reference? */ } zval; ``` 其中`type`字段用于标识`value`中的具体类型,而`value`字段则包含了具体的值。例如,...