Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2010, 18:50   #1
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию Массив объектов

Есть массив объектов некоторого класса. в этом массиве , допустим третий элемент перестал быть нужен. как от него избавиться?

(поимённая передача всех параметров последнего в списке объекта третьему возможным не представляется - слишком много всего)

Как бы это сделал профи?
_bAd_ вне форума Ответить с цитированием
Старый 19.01.2010, 18:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Delete работает и с массивами.

Цитата:
Как бы это сделал профи?
TList
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2010, 19:08   #3
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

Ладна, ребят, прошу прощения. Скажу иначе

OB1:= TOb.Create;
OB2:= OB1;
OB1:=nil

как обойти механизм уничтожения объекта?

Последний раз редактировалось _bAd_; 19.01.2010 в 20:11.
_bAd_ вне форума Ответить с цитированием
Старый 19.01.2010, 20:18   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Delete,Copy,Insert все три работают и с массивами(о чем гласит и подсказка о параметрах)
на крайняк можно и через CopyMemory сделать

а с TList работать как и обычно...создаем динамически структуру...и записываем в TList указатель на нее.
а обратно читаем указатель и работаем с ним(не забываем приводить типы)
я часто юзаю TList чтоб хранить структуры...(точнее я храню обьекты классов), но я делаю класс, который содержит в себе TList.
вот пример из моего кода:
Код:
 TPhPLIConstants=class
  private
   FList:TList;
  protected
   function GetCount:integer;
   function GetItem(Index:integer):TPhPLIConstant;
  public
   procedure SaveToStream(Stream:TStream);
   procedure LoadFromStream(Stream:TStream);
   constructor Create;
   destructor Destroy;override;
   function Add(AName,AValue:ANSIstring;AConstType:TPhPLIConstType;ADescription:string):integer;
   procedure Clear;
   procedure Delete(Index:integer);
   property Items[Index:integer]:TPhPLIConstant read GetItem;default;
   property Count:integer read GetCount;
 end;

function TPhPLIConstants.GetCount;
begin
 Result:=FList.Count;
end;

function TPhPLIConstants.GetItem;
begin
 Result:=TPhPLIConstant(FList[Index]);
end;

procedure TPhPLIConstants.SaveToStream;
var i:LongInt;
begin
 i:=FList.Count;
 Stream.Write(i,SizeOf(i));
 for i:=0 to FList.Count-1 do TPhPLIConstant(FList[i]).SaveToStream(Stream);
end;

procedure TPhPLIConstants.LoadFromStream;
var i:LongInt;
    P:TPhPLIConstant;
begin
 Stream.Read(i,SizeOf(i));
 FList.Count:=i;
 for i:=0 to FList.Count-1 do
  begin
   P:=TPhPLIConstant.Create;
   P.LoadFromStream(Stream);
   FList[i]:=Pointer(P);
  end;
end;

constructor TPhPLIConstants.Create;
begin
 FList:=TList.Create;
end;

destructor TPhPLIConstants.Destroy;
begin
 Clear;
 FList.Destroy;
 inherited Destroy;
end;

function TPhPLIConstants.Add;
var P:TPhPLIConstant;
begin
 P:=TPhPLIConstant.Create;
 P.Name:=AName;
 P.ConstType:=AConstType;
 P.Value:=AValue;
 P.Description:=ADiscription;
 Result:=FList.Add(Pointer(P));
end;

procedure TPhPLIConstants.Clear;
var i:integer;
begin
 for i:=0 to FList.Count-1 do TPhPLIConstant(FList[i]).Free;
 FList.Clear;
end;

procedure TPhPLIConstants.Delete;
begin
 TPhPLIConstant(FList[Index]).Free;
 FList.Delete(Index);
end;
Цитата:
Код:
OB1:= TOb.Create;
OB2:= OB1;
OB1:=nil
как обойти механизм уничтожения объекта?
немного не понял вопроса...
у вас обьект 1 не уничтожается, а он передается обьекту 2.
тут лучше всего вспомнить что обьект в Делфи это указатель на его данные.тогда становится все понятно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 19.01.2010 в 20:21.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2010, 21:08   #5
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

> Как бы это сделал профи?

Профи при прочих равных условиях не стал бы страдать ерундой с массивом.
Профи знает о существовании стандартного списочно-ориентированного класса TObjectList, избавляющего от необходимости явного разрушения объекта, фигурирующего в составе элементов этого списка.
Сергeй вне форума Ответить с цитированием
Старый 19.01.2010, 21:57   #6
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

Злые вы.
Но спасибки. Ответ не получил, но можно хоть дальше двигаться. С ТЛистом. (не люблю работать с тем , чьи кишки не знаю как работают. В частности иногда было бы неплохо создать объект, описанный локально. И глобально помнить только указатель на него. И чтоб этот указатель продолжал указывать куда надо после выхода из процедуры)

Последний раз редактировалось _bAd_; 19.01.2010 в 22:00.
_bAd_ вне форума Ответить с цитированием
Старый 19.01.2010, 22:01   #7
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

> Ответ не получил

Как это не получил ?
Ты не веришь в существование волшебного TObjectList, который пользуют профи, которыми ты так интересовался ?)

Tак жми же скорей F1 !
И да будет блажен уверовавший))
Сергeй вне форума Ответить с цитированием
Старый 19.01.2010, 22:30   #8
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

О в это трудно не поверить. Но еще трудней смириться.
_bAd_ вне форума Ответить с цитированием
Старый 19.01.2010, 22:43   #9
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

> еще трудней смириться

С чем ?)
С тем что , в отличие от TList, при использовании его специально "заточенного" наследника TObjectList отпадает необходимость явного разрушения объектов-элементов списка ?)
Сергeй вне форума Ответить с цитированием
Старый 19.01.2010, 23:22   #10
_bAd_
Пользователь
 
Регистрация: 11.01.2010
Сообщений: 21
По умолчанию

ну раз такой флейм пошел: с тем, что я не знаю как оно работает.
_bAd_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка объектов KinderX Microsoft Office Excel 5 22.09.2009 05:13
массив объектов balamut JavaScript, Ajax 4 29.05.2009 14:49
Присваивание объектов Stalevar Общие вопросы Delphi 0 17.02.2009 19:06
массив объектов с конструктором копии pu4koff Общие вопросы C/C++ 6 18.06.2008 17:33
Конструктор объектов Yoger Общие вопросы Delphi 10 20.04.2007 12:45