相关疑难解决方法(0)

"复制"不会创建动态阵列的独立副本

参考http://docwiki.embarcadero.com/RADStudio/XE6/en/Structured_Types#Dynamic_Arrays上的在线文档.

很清楚地写道,要创建动态数组的独立副本,请使用Copy()函数.在该链接中找到的示例代码还说明了在复制之后,如果更改了一个数组,则它不会反映到另一个数组中,因为它们都是独立副本.但是,这对我不起作用.复制之后,如果我更改了一个数组,另一个数组会自动更改为接收相同的值,这意味着Copy()只执行X:= Y所做的操作.根据文档,"X:= Y"和"X:=复制(Y)" 相同.

这是我的代码:

type
  TTestArray = array of TMyType; //Note: TMyType is a class and not a record.

var
  X, Y, Z: TTestArray;

begin
  SetLength(X, 1); //create first array
  X[0].testString := 'Test Y';
  Y := copy(X);
  X[0].testString := 'Test Z'; //re-assign another value
  Z := copy(X);
  X[0].testString := 'Test X';
Run Code Online (Sandbox Code Playgroud)

此时,testString字段应包含不同的文本.所以,

X[0].testString should be 'Test X'
Y[0].testString should be 'Test Y'
Z[0].testString should be 'Test Z'
Run Code Online (Sandbox Code Playgroud)

但是,所有这三个都只有'Test X'作为testString中的值,因此暗示Copy()没有创建数组X的独立副本.相反,所有三个数组都指向相同的内存位置.

任何可靠地创建动态数组的独立副本的方法(即完成我上面尝试做的事情)?

注意(稍后添加): TMyType是一个类而不是记录.因此,根据下面非常有用的评论,这是CLASS情况下的预期行为.那么,在这种情况下,如何将X独立复制到Y和Z?

注2:从主题行中删除"Bug".对不起,Embarcadero ...... …

arrays delphi

2
推荐指数
1
解决办法
439
查看次数

标签 统计

arrays ×1

delphi ×1