记录类型中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

时间: 2024-12-18 10:02:39

记录类型中String的释放的相关文章

Java中String类型详解

这篇博客是我一直想总结的,这两天一直比较忙,先上传下照片吧,过后有时间再弄成正常的. 本文主要是对Java中String类型的总结,包括其在JVM中是怎么存储的...

js中String转Date类型并比较大小

1.比较常用的方法,但繁琐: 主要使用Date的构造方法:Date(int year , int month , int day) Java代码   <script> var str1 = "2009-8-9"; var arr1 = str1.split("-"); var date1 = new Date(arr1[0],parseInt(arr1[1])-1,arr1[2]); var str2 = "2009-8-4"; va

C++中string类型对象和double型变量之间的互相转换

//convert string type value to double type value string s = "23"; double d; istringstream is(s); is>>d; cout<<d<<endl;   //输出23 //convert double type value to string type value double d=45; string s; ostringstream os; os<<

java中String类型转换方法

integer to String : int i = 42;String str = Integer.toString(i);orString str = "" + idouble to String :String str = Double.toString(i);long to String :String str = Long.toString(l);float to String :String str = Float.toString(f);String to intege

Java中String转换Double类型 Java小数点后留两位

Java中String转换Double类型 double num1 = 0.0; String qq = "19.987"; num1 = Double.valueOf(qq.toString()); 太祖元年 Java小数点后留两位 double num1 =11; double num1 =21; String num1 =""; DecimalFormat df = new DecimalFormat(".00");num3 = df.fo

.net中String是引用类型还是值类型 以及 C#深层拷贝浅层拷贝

http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html http://www.cnblogs.com/zwq194/archive/2012/08/06/2625403.html 关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助. 如果有错误请指出. 来看下面例子: //值类型 int a = 1; int b = a; a = 2; Cons

(转)Java中String类型的参数传递问题

这篇文章主要介绍了简单谈谈Java中String类型的参数传递问题的相关资料,需要的朋友可以参考下 提要:本文从实现原理的角度上阐述和剖析了:在Java语言中,以 String 作为类型的变量在作为方法参数时所表现出的“非对象”的特性. 一.最开始的示例 写代码最重要的就是实践,不经过反复试验而得出的说辞只能说是凭空遐想罢了.所以,在本文中首先以一个简单示例来抛出核心话题: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public clas

Java中double类型与String 类型之间的互相转换

Java中String类型和double类型之间的转换 我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页面上显示的时候,需要从数据库获取出生日期,此时该类型为日期类型,然后需要将该日期类型转为字符串显示在页面上,Java的API中为我们提供了日期与字符串相互转运的类DateForamt.DateForamt是一个抽象类,所以平时使用的是它的子类SimpleDateFor

在Java中String类为什么要设计成final?String真的不可变吗?其他基本类型的包装类也是不可变的吗?

最近突然被问到String为什么被设计为不可变,当时有点懵,这个问题一直像bug一样存在,竟然没有发现,没有思考到,在此总结一下. 1.String的不可变String类被final修饰,是不可继承和修改的.当一个String变量被第二次赋值时,不是在原有内存地址上修改数据,而是在内存中重新开辟一块内存地址,并指向新地址. String类为什么要被设计为是final的? 1.不可变性支持线程安全. 2.不可变性支持字符串常量池,提升性能. 3.String字符串作为最常用数据类型之一,不可变防止