Показать сообщение отдельно
  #3  
Старый 31.08.2022, 07:23
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Не совсем понятен вопрос...
Основное что я пытаюсь для себя уяснить: существует ли объект независимо от наличия и количества указателей на него.
Создание объекта это выделение памяти под него и все его поля, присвоение nil указателю не удаляет объект из памяти.
Поля типов не являющихся классами (число, строка, boolen) удаляются автоматом при вызове деструктора объекта.
Объявление переменной типа TSomeClass не создает новый объект (не выделяет под него память), а присвоение:
Код:
CurrenPart:=  AllParts[0];
означает что CurrenPart и AllParts[0] это два указателя на одну и ту-же область памяти.

Цитата:
Сообщение от lmikle
..лучше сделать индексированное св-во с геттером и сеттером
Вот кстати да, это же вот про это?
Код:
    property Parts[Index: Word]: TPart read GetParts write SetParts;
    property Products[Index: Byte]: TProduct read GetProducts write SetProducts;
    property Tasks[Index: Word]: TTask read GetTasks write SetTasks;
Сначала так и сделал, а в других классах, чисто на автомате, объявил свойство типа массив, а потом сам удивлялся что оно работает. И возник вопрос: в чем разница? Если я правильно понимаю, имя (переменная) массива это указатель на первый элемент и при обращении к массиву Array[Index] фактически это будет адрес первого элемента + индекс. Собственно геттер\сеттер это и делают.
Код:
function TMyJSONdb.GetTasks(Index: Word): TTask;
  begin Result:= FTasks[Index]; end;

procedure TMyJSONdb.SetTasks(Index: Word; const Value: TTask);
  begin FTasks[Index]:= Value; end;
Ответить с цитированием