zoukankan      html  css  js  c++  java
  • 记录类型中String的释放

    String能自动释放,在进行内存拷贝时需要进行手动释放。可以直接调用Finalize手工释放

    如:TGraphicHideTab 记录中声明的Caption:string

    复制代码
    TGraphicHideTab = record  
      Image:Integer;  
      Data:Integer;  
      Size:Integer;       /// 绘制时使用的尺寸  
      Caption:string;     /// <--- 记录中有String  
    end;  
    复制代码

    直接内存处理的时候String不会自动处理计数,需要手工处理String。

    复制代码
    var   
      FItems:array of TGraphicHideTab;  
      FCount:integer;  
      
    procedure DeleteItem(AIndex: Integer);  
    begin  
      ///   
      ///  使用内存移动的时候String计数不会改变,因此需要手工处理String的计数  
      ///  
      if (AIndex >= 0) and (AIndex < FCount) then  
      begin  
        Finalize(FItems[AIndex]);   // <-- 手工释放Record中的String  
        if AIndex < FCount - 1 then  
          Move(FItems[AIndex + 1], FItems[AIndex], sizeof(TGraphicHideTab) * (FCount - AIndex - 1));  
        dec(FCount);  
      end;  
    end;  
    复制代码

    http://www.cnblogs.com/gleam/p/3600797.html

  • 相关阅读:
    JVM调优--常用JVM监控工具使用
    jvm启动常用参数配置
    公钥和私钥原理
    tcp三次握手四次挥手
    内存泄漏和内存溢出
    hashmap解析
    Visual C++ 6.0 断点调试记录
    C++中输入一组不确定长度的数
    异或
    NULL与nullptr
  • 原文地址:https://www.cnblogs.com/findumars/p/5551681.html
Copyright © 2011-2022 走看看