zoukankan      html  css  js  c++  java
  • 纠正一个概念:类就有VMT,各实例不过是共享这个VMT而已

    不是只有实例才有VMT,举个例子,各实例的VMT地址是相同的:

    Use System.Contnrs;
    
    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      ObjList1, ObjList2: TList;
      p1, p2: Pointer;
    begin
      ObjList1 := TObjectList.Create(True);
      ObjList2 := TObjectList.Create(True);
      if ObjList1 = ObjList2 then
        ShowMessage('ObjList1 = ObjList2'); // 不执行
    
      p1:= PPointer(ObjList1)^;
      p2:= PPointer(ObjList2)^;
      if Integer(p1) = Integer(p2) then
        ShowMessage('ObjList1.VMT = ObjList2.VMT'); // 执行
    end;

    再和类的VMT比较:

    procedure TForm1.BitBtn3Click(Sender: TObject);
    var
      ObjList1, ObjList2: TList;
      p1, p2: Pointer;
    begin
      ObjList1 := TObjectList.Create(True);
      ObjList2 := TObjectList.Create(True);
      if ObjList1 = ObjList2 then
        ShowMessage('ObjList1 = ObjList2'); // 不执行
    
      p1:= Pointer(TObjectList);
      p2:= PPointer(ObjList2)^;
      if Integer(p1) = Integer(p2) then
        ShowMessage('TObjectList.VMT = ObjList2.VMT'); // 相等,执行
    end;

    这也相当于说,类的第一项元素就是VMT,而VMT的第一项内容是一个地址,它是指向一个函数的指针。

    ------------------------------------------------------------------------------------------------------------

    http://blog.csdn.net/linzhengqun/article/details/1755493

  • 相关阅读:
    Java 字符串判空
    JavaScript try catch 常用场景(一)
    IE console 未定义
    共享锁与排它锁
    js 原型链
    js的原型模式
    js中RegExp类型
    js中Array对象方法详解
    js动态生成input指定My97DatePicker时间问题
    利用spring、cxf编写并发布webservice
  • 原文地址:https://www.cnblogs.com/findumars/p/5303289.html
Copyright © 2011-2022 走看看