Phần trích dẫn từ Delphi 7 giúp đỡ, "Đối với một dài chuỗi hoặc biến động-mảng, SetLength
reallocates chuỗi hoặc mảng tham chiếu bởi S với độ dài nhất định. Ký tự hiện tại chuỗi hoặc các yếu tố trong mảng Một ngoại lệ là khi tăng chiều dài của một mảng động, trong đó các phần tử là các kiểu phải được khởi tạo (các chuỗi, các biến thể, các mảng biến thể, hoặc các bản ghi có chứa các phần tử đó). Khi S là một mảng động các loại phải được khởi tạo, không gian được phân bổ mới được đặt thành 0
hoặc nil
. "
Từ quan sát của tôi, đối với mảng tĩnh, các phần tử chưa được khởi tạo chứa dữ liệu ngẫu nhiên. Đối với mảng động, AFAIK từ Delphi 7, các phần tử chưa được khởi tạo chứa giá trị
mặc định
không có giá trị. Tuy nhiên, bạn không nên dựa vào thực tế này bởi vì nó đã được thực hiện chi tiết của SetLength
. Bạn nên làm theo các tài liệu chính thức để thay thế.
-1 điều này là không đúng trong Delphi 7 - bất cứ điều gì doc nói, mã trong System.pas DOES khởi tạo dữ liệu mảng động với số không byte –
Bạn có thể đảm bảo một hành vi như vậy sẽ vẫn như bây giờ trong các phiên bản tương lai của Delphi? Đối với bình luận của bạn về Delphi 7, xin vui lòng đọc đoạn thứ hai. – Vantomex
Để tránh bất kỳ hồi quy nào trong các ứng dụng hiện có, tôi không thể đảm bảo EMB không thể thay đổi mã ... nhưng chúng khá thận trọng về những suy nghĩ như vậy ...họ biết rằng rất nhiều mã dựa vào hành vi không có giấy tờ này. Kể từ khi Delphi 5/6/7 ... 2010/XE system.pas mã là trong pascal tinh khiết, và rất dễ dàng để chuyển đổi sang 64 bit (chuyển đổi PChar để NativeInt hoặc như vậy), tôi không tìm thấy bất kỳ lý do tại sao họ nên thay đổi việc triển khai trong tương lai: điền tất cả bộ nhớ mới cùng một lúc nhanh hơn khởi tạo chuỗi riêng lẻ, các biến thể và như vậy. –