Kayıtlar, referans türleri değil, değer türleridir. Bu, daha büyük bir veri yapısının üyeleri olarak kullanılan tüm kayıtların, bir işaretçi yerine yapının içine sıralı olarak yerleştirildiği anlamına gelir. Birbirini içeren iki kayıt oluşturmaya çalışmak, derleyiciyi, kayıtların yapısını anlamaya çalışırken sonsuz bir döngüye fırlatacaktır. Muhtemelen bir rekor beyan edememenin nedeni budur ve burada bir referans tipi (dinamik dizi) yerleştirmeye çalışsanız bile, dil kurallarını ihlal edemezsiniz.
Ama ne yapabilirim böylece gibi bir ileri beyanı gibi bir işaretçi-to-kayıt türü bildirmek olduğunu: Elbette
PMyRec2 = ^MyRec2
...
MyRec2 = record
...
end;
, sen kayıtlarına işaretçileri kullanmaya başladığınızda, size tahsis konusunda endişelenmenize gerek ve belleği serbest bırakarak, sınıfları kullanmamaktan kaçınmaya çalıştığınız kod karmaşıklığı projenizde görünür. Alt satır: bunu derslerle yapın. Her ikisi de olmasa da, kayıtlardan birini yapın. Bu gerçekten en basit yol.
Ekstra bellek yükü ihmal edilebilir. Her bir nesne için, bir nesneye işaretçiler için ihtiyacınız olan bir işaretçiye, ayrıca D2009'dan önce bir tane gizli alana (4 byte) veya D2009 veya daha sonraki sürümlerine (8 bayt) işaretçi çıkar. Bu hiç de fazla değil.
Olası yinelenen: http://stackoverflow.com/questions/2420650/cross-reference-between-delphi-records –
Bu hiç mantıklı değil. Her bir MyRec2Array öğesinin uzunluğunun sabit ve sıfır olmadığını varsayarsak, sonsuz sayıda bayt içerecek bir veri yapısı oluşturmaya çalışıyorsunuzdur ... –
@Andreas Rejbrand - MyRec2Array * dinamik * dizisidir. – Alex