Delphi栈对象
来自:http://blog.csdn.net/iseekcode/article/details/5158985
----------------------------------------------------------------------------
//如需转载请注明出处
//作者: 逍遥萧
//来源: http://www.xy13.cn
估计很多用了Delphi很多年的都不知道Delphi有支持栈对象.
C++里对象即可以创建为堆对象,也可以创建为栈对象
常用的对象都是从TObject继承,此种对象需要创建释放,不然会内存漏洞
而栈对象不需要创建,也不需要释放,当对生命周期完成时会自动清理
下面测试一下效果
type
PA = ^TA;
TA = object
D1: Integer;
D2: Word;
D3: Byte;
constructor Create;
destructor Destroy;
end;
constructor TA.Create;
begin
ShowMessage('Create');
end;
destructor TA.Destroy;
begin
ShowMessage('Destroy');
end;
procedure TForm2.Button1Click(Sender: TObject);
var
A: TA;
begin
ShowMessage(IntToStr(A.D1)); //对象A不需要创建,直接访问
ShowMessage(IntToStr(SizeOf(TA))); //7
end;
经测试发现对象的构造函数和析构函数并没调用,而且看起来跟packed record很相似,
堆对象是个指针,大小始终是4,而栈对象的大小由内部数据而定,可见不是指针变量
再测试栈对象,从堆上创建,即使用new关键字,并且在创建时在参数里带上构造函数
procedure TForm2.Button1Click(Sender: TObject);
var
A: PA;
begin
New(A, Create);
ShowMessage(IntToStr(A^.D1));
Dispose(A, Destroy);
end;
如果new 后面不带参数.构造函数不会被执行,而且带了之后,对象还会被初始化
这里就是唯packed record的区别了,record不能带构造函数,否则无法编译
感觉意义不大,白高兴一场,如果D7用户还有点用处,因为record里不支持方法
-------------------------------------------------------------------------
可惜,孤陋寡闻多年,才知道。
我的一个自定义数据库里,有个数据头结构,如果定义为object的话,数据库升级
版本就方便多了。
一直用D7。
据说D2007后就有记录对象了。
最新文章
- redis常用命令小结
- 【转】Swift开源项目精选
- java io读书笔记(4)字符数据
- (转载)HTML标签<;br>;<;br/>;的区别在哪里?
- Majority Element II——LeetCode
- QF——OC字符串
- 框架开发(三)---smarty整合
- Asp.NET MVC3 使用 SignalR 实现推
- php 抽象类和接口类
- Zsh安装及常用操作
- 链式前向星版DIjistra POJ 2387
- CVU -fixup
- kebab HDU - 2883(按时间段建点)
- mysql插入数据会变中文
- vue调用支付接口
- Maths | 离散K-L变换/ 主成分分析法
- Centos 7升级内核
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
- Codeforces Round #264 (Div. 2) D. Gargari and Permutations 多序列LIS+dp好题
- October 12th 2017 Week 41st Thursday
热门文章
- TouTiao开源项目 分析笔记19 问答内容
- 集合源码分析之 HashMap
- Quartus 11进行编译Compile Design的时候出现错误near text &#227;
- 《Cracking the Coding Interview》——第5章:位操作——题目5
- 《Cracking the Coding Interview》——第4章:树和图——题目8
- 《算法》C++代码 SPFA
- HDU 4741 Save Labman No.004 ( 三维计算几何 空间异面直线距离 )
- 【Android】实验7 BindService模拟通信 截止提交日期2016.5.3
- 【转】Itween 贝塞尔曲线(一)
- POJ 3304 Segments | 线段相交