Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Сделать копию объекта   Найти похожие ветки 

 
Piero ©   (2005-12-08 12:49) [0]

У меня есть объект типа TElem

var e1,e2 : TElem;

если я делаю
...
e1.create;
e1:=e2;
то e1 указывает на тот же адресс памяти, что и e2,
и естественно, после e2.free -> e1 - тоже уничтожен
как сделать, так чтобы e1 - создал свою копию объекта


 
Piero ©   (2005-12-08 12:53) [1]

copymemory(e1,e2,sizeof(e2)) - не получается


 
Ormada ©   (2005-12-08 12:54) [2]

Assign + F1


 
Piero ©   (2005-12-08 13:39) [3]

Ну и чего, ничего F1 не выдает

TElem  = class
.....


 
Piero ©   (2005-12-08 13:40) [4]

Вернее не так, как применить метод assign к моему объекту


 
Джо ©   (2005-12-08 16:49) [5]

Если делать только на основе TObject, то нужно все реализовывать руками. Например, это может выглядеть так:

type
 TElement = class
 private
   FTag: Integer;
   FText: string;
   ... и другие поля
 public
   property Tag: Integer read FTag write FTag;
   property Text: string read FText write FText;
   // клонирует объект со всеми его полями
   function Clone: TElement;
 end;

implementation

function TElement.Clone: TElement;
begin
 // никакого волшебства: создаем новый объект
 // и передаем ему значения наших полей
 Result := TElement.Create;
 Result.FTag := FTag;
 Result.FText := FText;
 // ... и остальные поля
end;

Использование выглядит так:

var
 Elem1,
 Elem2: TElement;
begin
 Elem1 := TElement.Create;
 Elem1.Tag := 1;
 Elem1.Text := "Element1";

 Elem2 := Elem1.Clone;
 ShowMessage(Elem2.Text);
 ....

Если базовым классом выбрать TPersistent лучше перекрывать его метод Assign (см. исходники VCL для того, чтобы понять логику работы). Если наследоваться от TComponent можно использовать его стандартные возможности сериализации/десиарелизации.


 
Digitman ©   (2005-12-08 16:53) [6]

TElem как декларирован ?


 
Piero ©   (2005-12-09 12:36) [7]

Ясно, я так примерно и сделал



Страницы: 1 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
14-1133201060
Profi
2005-11-28 21:04
2005.12.25
Лицензионная Delphi


9-1122008433
Мелкий
2005-07-22 09:00
2005.12.25
Проблемы с DirectInput + VS 6.0 и собственными модулями(ООП)


2-1134157679
MAXHO
2005-12-09 22:47
2005.12.25
Как получить такой эфект?


14-1133514288
Yuri Btr
2005-12-02 12:04
2005.12.25
Скорость RadioEthernet


3-1131431309
makvell
2005-11-08 09:28
2005.12.25
Псевдонимы...