我试图了解指向字符串的指针是如何工作的。我有一个代码(不完全是原创的),是有人写的,这个人已经不在了,所以我需要了解这种用法的想法。
var
STR: string;
pStr: ^string;
begin
STR := 'Hello world';
New(pStr);
pStr^ := STR;
PostMessage(Handle, WM_USER+1, wParam(pStr), 0);
end;
现在我确定,消息处理程序获取消息并且指针包含可以使用的字符串,但是这些操作的“幕后”会发生什么?
我试着做一个小项目。我认为,将字符串分配给 str 指针所指向的内容实际上会增加原始字符串的 refcount 并且不会复制字符串,但 refcount 仍然为 1,而且它似乎确实复制了内容。
那么问题来了,发生了什么?调用New
指针会分配一个空字符串,对吗?分配后,我尝试查看指针指向的字符串的引用计数/长度,PChar(@pStr^[1])[-8]
但它返回无意义(14),并且长度字节也是错误的。
此外,问题是,使用指针通过 Windows 消息传递字符串是否安全?