文档中说string的-4偏移存放的是字符串的长度,-8偏移处存放的是字符串的引用计数。
但是我在delphi6中测试发现只有全局的string用“PInteger(Integer(str)-8)^”取出来的才
是引用计数,在一个procedure中定义的局部string变量,用上面的方法取到的始终是-1,
不解了,向各位请教!^_^
但是我在delphi6中测试发现只有全局的string用“PInteger(Integer(str)-8)^”取出来的才
是引用计数,在一个procedure中定义的局部string变量,用上面的方法取到的始终是-1,
不解了,向各位请教!^_^
procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
P:PInteger;
I:Integer;
begin
S:='abceecit';
P:=PInteger(Integer(S)-4);
I:=P^;
showmessage(inttostr(I)); //显示字符串长度
P:=PInteger(Integer(S)-8);
I:=p^;
showmessage(inttostr(I));
end;
呵呵,你是这样写的吧:
var
s : string
begin
s := '12345';//这样的话引用计数就是-1,因为'12345'存储在静态数据区,
编译的时候地址就定了,属于常量~~~~~~`也就是,不能动态地释放如果这样:s:=inttostr(handle);引用计数就不是-1了~~~````
我就用一个常量测试的,嘿嘿,不好意思,基础知识不扎实,惭愧ing~~散分~~