Я все еще думаю, что предел не ограничен на визуальной части. Несомненно, мониторы и разрешения являются достаточно большими для показа еще большего количества символов в одной строке в наше время, но она увеличивает удобочитаемость?
, Если предел действительно осуществляется, это - также серьезное основание заново продумать код и не для помещения всего в одну строку. Это - то же с добавлением отступа - если Вам нужно ко многому, выравнивается, Ваш код должен заново продуматься.
Для 1 и 2: записи являются типами значений, а классы - ссылочными типами. Они выделяются в стеке или непосредственно в пространстве памяти любой более крупной переменной, которая их содержит, а не с помощью указателя, и автоматически очищаются компилятором, когда они выходят за пределы области видимости.
Что касается вашего третьего вопроса, TList
внутренне объявляет массив TMyRecord
для хранения. Все записи в нем будут очищены при уничтожении списка. Если вы хотите удалить конкретный файл, используйте метод Delete
для удаления по индексу или метод Remove
для поиска и удаления. Но имейте в виду, что, поскольку это тип значения, все, что вы делаете, будет копировать запись, а не копировать ссылки на нее.
Есть еще несколько различий между классом и записью. Классы могут использовать полиморфизм и предоставлять интерфейсы. Записи не могут реализовывать деструкторы (хотя, начиная с Delphi 2006, они теперь могут реализовывать конструкторы и методы).
Записи очень полезны при сегментировании памяти в более логическую структуру, поскольку первый элемент данных в записи находится в той же адресной точке, что и указатель на саму запись. Это не относится к классам.
Одно из основных преимуществ записей - это наличие большого «массива записей». Это создается в памяти путем выделения пространства для всех записей в одном непрерывном пространстве ОЗУ, что происходит очень быстро. Если бы вместо этого вы использовали «массив TClass», каждый объект в массиве должен был бы быть выделен сам по себе, что происходит медленно.
Было проделано много работы по повышению скорости выделения памяти, чтобы улучшить скорость строк и объектов, но она никогда не будет такой же быстрой, как замена 100 000 выделений памяти на 1 выделение памяти.
Однако, если вы используете массив записей, не копируйте запись в локальных переменных. Это может легко убить выигрыш в скорости.
Между записями и классами есть много различий; и нет «Указателя для записи» <> «Класс». У каждого есть свои плюсы и минусы; одна из важных вещей в разработке программного обеспечения - это понимать их, чтобы вам было легче выбрать наиболее подходящий для данной ситуации.
1) Чтобы учесть наследование и полиморфизм, классы имеют некоторые накладные расходы. Записи не допускают их, и в некоторых ситуациях может быть несколько быстрее и проще в использовании. В отличие от классов, которые всегда выделяются в куче и управляются с помощью ссылок, записи также можно размещать в стеке, обращаться к ним напрямую и присваивать друг другу без необходимости вызова метода «Назначить». Также записи полезны для доступа к блокам памяти с заданной структурой, потому что их структура памяти точно такая, как вы ее определяете. Компоновка памяти экземпляра класса контролируется компилятором и содержит дополнительные данные для работы объектов (например, указатель на таблицу виртуальных методов).
2) Если вы не распределяете записи динамически, используя New () или GetMem (), записи Память управляется компилятором как порядковые числа, числа с плавающей запятой или статические массивы: память глобальных переменных выделяется при запуске и освобождается, когда программа завершается, а локальные переменные выделяются в стеке при входе в функцию / процедуру / метод и освобождаются при выходе. Выделение / высвобождение памяти в стеке происходит быстрее, потому что не требуется вызовов диспетчера памяти, просто очень мало инструкций ассемблера для изменения регистров стека. Если записи являются полями класса, они выделяются при создании класса и освобождаются, когда класс освобождается.
3) Одно из преимуществ дженериков - устранение необходимости в низкоуровневом управлении указателями - но имейте в виду внутренней работы.