来自: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后就有记录对象了。

最新文章

  1. redis常用命令小结
  2. 【转】Swift开源项目精选
  3. java io读书笔记(4)字符数据
  4. (转载)HTML标签<br><br/>的区别在哪里?
  5. Majority Element II——LeetCode
  6. QF——OC字符串
  7. 框架开发(三)---smarty整合
  8. Asp.NET MVC3 使用 SignalR 实现推
  9. php 抽象类和接口类
  10. Zsh安装及常用操作
  11. 链式前向星版DIjistra POJ 2387
  12. CVU -fixup
  13. kebab HDU - 2883(按时间段建点)
  14. mysql插入数据会变中文
  15. vue调用支付接口
  16. Maths | 离散K-L变换/ 主成分分析法
  17. Centos 7升级内核
  18. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
  19. Codeforces Round #264 (Div. 2) D. Gargari and Permutations 多序列LIS+dp好题
  20. October 12th 2017 Week 41st Thursday

热门文章

  1. TouTiao开源项目 分析笔记19 问答内容
  2. 集合源码分析之 HashMap
  3. Quartus 11进行编译Compile Design的时候出现错误near text ã
  4. 《Cracking the Coding Interview》——第5章:位操作——题目5
  5. 《Cracking the Coding Interview》——第4章:树和图——题目8
  6. 《算法》C++代码 SPFA
  7. HDU 4741 Save Labman No.004 ( 三维计算几何 空间异面直线距离 )
  8. 【Android】实验7 BindService模拟通信 截止提交日期2016.5.3
  9. 【转】Itween 贝塞尔曲线(一)
  10. POJ 3304 Segments | 线段相交