【C++】Delphi中类似C中static变量的实现

栏目: 编程语言 · 发布时间: 7年前

内容简介:编程模式单例模式中强调一个程序中只有一个类的实例。C++中用类的static成员和static方法实现。用Delphi中没有static关键字,用全局变量保存实例不是好的实现方式。Delphi中有类方法可直接调用。在类方法中使用const实现类似C的static成员。

编程模式单例模式中强调一个程序中只有一个类的实例。

C++中用类的static成员和static方法实现。

用Delphi中没有static关键字,用全局变量保存实例不是好的实现方式。Delphi中有类方法可直接调用。在类方法中使用const实现类似C的static成员。

TSingle = class(TObject)

private

protected

constructor CreateInstance;

class funtion GetInstance(Request: integer): TSingle;

public

constructor Create;

destructor Destroy; override;

class procedure ReleaseInstance;

class function SingleInstance: TSingle;

end;

implementation

constructor TSingle.Create;

begin

inherited Create;

raise Exception.CreateFmt('只能通过SingleInstance方法来创建和访问%s的实例!', [ClassName]);

end;

constructor TSingle.CreateInstance;

begin

inherited Create;

end;

destructor TSingle.Destroy;

begin

if GetInstance(0) = self then GetInstance(2);

inherited Destroy;

end;

class function TSingle.GetInstance(Request: integer): TSingle;

const FInstance: TSingle = nil;

begin

{

Request = 0 : 不做任何处理,供释放时使用

Request = 1 : 存在该类实例时使用该实例,不存在时创建之

Request = 2 :返回一个空指针,用于重置实例

}

case Request of

0: ;

1: if not Assigned(FInstance) then FInstance := CreateInstance;

2: FInstance := nil;

else

raise Exception.CreateFmt('%d是GetInstance()的非法参数调用', [Request]);

end;

result := FInstance;

end;

class procedure TSingle.ReleaseInstance;

begin

GetInstance(0).Free;

end;

Class function TSingle.SingleInstance: TSingle;

begin

result := GetInstance(1);

end;


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++标准库(第2版)

C++标准库(第2版)

Nicolai M. Josuttis / 侯捷 / 电子工业出版社 / 2015-6 / 186.00元

《C++标准库(第2版)》是全球C++经典权威参考书籍时隔12年,基于C++11标准的全新重大升级。标准库提供了一组公共类和接口,极大地拓展了C++语言核心功能。《C++标准库(第2版)》详细讲解了每一标准库组件,包括其设计目的和方法、复杂概念的剖析、实用而高效的编程细节、存在的陷阱、重要的类和函数,又辅以大量用C++11标准实现的实用代码范例。除覆盖全新组件、特性外,《C++标准库(第2版)》一......一起来看看 《C++标准库(第2版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具