您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Delphi >> 正文

Google
Delphi之数组
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 15:58:02
  k:='I love Delphi!';计数器应该为1,因为刚刚分配内存,只有一个使用者
          P:=@K[1];
          Dec(P,2);
          MyAnsiString:=@(p^);
          showmessage('现在计数器:'+Inttostr(MyAnsiString^.ReferencCount));
          showmessage('长度为:'+Inttostr(MyAnsiString^.Length));
          j:=K;//计数器应该加1,因为j的指针指向了他,使用者又多了一个
          showmessage('现在计数器:'+Inttostr(MyAnsiString^.ReferencCount));
          showmessage('长度为:'+Inttostr(MyAnsiString^.Length));
          j:='123';//计数器应该减1,因为j的指针指不再指向他,使用者少了一个
          showmessage('现在计数器:'+Inttostr(MyAnsiString^.ReferencCount));
          showmessage('长度为:'+Inttostr(MyAnsiString^.Length));
          k:=j;//k的指针指向j的内容所在,那么这片数据的计数器再减去一个,即为0。
          //然而因该该内存区域已经被自动释放所以这里再去读数的话就是一些随机数据
          showmessage('现在计数器:'+Inttostr(MyAnsiString^.ReferencCount));
          showmessage('长度为:'+Inttostr(MyAnsiString^.Length));
        end;

       动态数组的回收机制原理相同,现在明白了为什么动态数组再回收时要给他赋成Nil了吧!变体型等生存期自管理的
       类型都是用这种机制来实现的.
       为什么说字符串是动态数组的一种呢?因为以上方法同样适用于动态数组。我们用动态数组自己实现一个
       AnsiString看看行不行呢?
       比如:
       Type
        PAnsiString=^TAnsiString;
        TAnsiString= record
           ReferencCount:LongWord;       //引用次数
           Length:LongWord;              //字符串长度
        end;
        var
          k,j: array of Integer;
          P:^LongWord;
          MyAnsiString:PAnsiString;
        begin
          SetLength(k,10);//计数器应该为1,因为刚刚分配内存,只有一个使用者k
          SetLength(j,10);
          P:=@K[0];
          Dec(P,2);
          MyAnsiString:=@(p^);
          showmessage('现在计数器:'+Inttostr(MyAnsiString^.ReferencCount));
          showmessage('长度为:'+Inttostr(MyAnsiString^.Length));
        

上一页  [1] [2] [3] [4] [5] [6] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号