Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Способ хранения объектов в памяти [D7, WinXP]


Страницы:   1 2

Verner ©   (2012-10-21 11:04:00) 

Здравствуйте!
Я создаю дерево (иерархию). В первом варианте использовал для этого переменные типа записи. Возник вопрос сделать каждый узел дерева объектом.

Я планирую к необходимым полям класса добавить ещё один метод .RetNode().

Вопрос: в дереве таких объектов может быть очень много. Будет ли каждый объект ссылаться на свой, отдельный метод .RetNode() в памяти, или все они будут содержать указатель на единый в памяти метод .RetNode() ?

Если таких методов в памяти будет столько же, сколько и объектов, лучше, конечно, объявить эту функцию вне класса.

Заранее благодарен.


Ega23   (2012-10-29 15:35:00) [1]


> Непонятно только насколько востребовано, например вот это "барахло":


А зачем востребовано такое "барахло", как Windows, SysUtils, Classes, Contnrs и т.д.?
Валим всё в одну кучу, заодно и писанины меньше :)


MetalFan   (2012-10-29 12:18:00) [2]


> насколько востребовано

а что, "очень убобно"!)))


Германн   (2012-10-25 01:01:00) [3]


> Ega23 ©   (24.10.12 07:44) [13]
>
>
> > Так что ты хотел этим примером сказать?
>
> Что тот object и этот record с методами, по сути, одно и
> то же.
>

Теперь понятно.
Непонятно только насколько востребовано, например вот это "барахло":
 TRect = record
 private
   function GetWidth: Integer;
   procedure SetWidth(const Value: Integer);
   function GetHeight: Integer;
   procedure SetHeight(const Value: Integer);
   function GetSize: TSize;
   procedure SetSize(const Value: TSize);
   function GetLocation: TPoint;
 public
   constructor Create(const Origin: TPoint); overload;                              // empty rect at given origin
   constructor Create(const Origin: TPoint; Width, Height: Integer); overload;      // at TPoint of origin with width and height
   constructor Create(const Left, Top, Right, Bottom: Integer); overload;          // at x, y with width and height
   constructor Create(const P1, P2: TPoint; Normalize: Boolean = False); overload;  // with corners specified by p1 and p2
   constructor Create(const R: TRect; Normalize: Boolean = False); overload;
   class operator Equal(const Lhs, Rhs: TRect): Boolean;
   class operator NotEqual(const Lhs, Rhs: TRect): Boolean;
   class operator Add(const Lhs, Rhs: TRect): TRect;
   class operator Multiply(const Lhs, Rhs: TRect): TRect;
   class function Empty: TRect; inline; static;
   procedure NormalizeRect;
   function IsEmpty: Boolean;
   function Contains(const Pt: TPoint): Boolean; overload;
   function Contains(const R: TRect): Boolean; overload;
   function IntersectsWith(const R: TRect): Boolean;
   class function Intersect(const R1: TRect; const R2: TRect): TRect; overload; static;
   procedure Intersect(const R: TRect); overload;
   class function Union(const R1: TRect; const R2: TRect): TRect; overload; static;
   procedure Union(const R: TRect); overload;
   class function Union(const Points: Array of TPoint): TRect; overload; static;
   procedure Offset(const DX, DY: Integer); overload;
   procedure Offset(const Point: TPoint); overload;
   procedure SetLocation(const X, Y: Integer); overload;
   procedure SetLocation(const Point: TPoint); overload;
   procedure Inflate(const DX, DY: Integer); overload;
   procedure Inflate(const DL, DT, DR, DB: Integer); overload;
   function CenterPoint: TPoint;
   function SplitRect(SplitType: TSplitRectType; Size: Integer): TRect; overload;
   function SplitRect(SplitType: TSplitRectType; Percent: Double): TRect; overload;
   property Width: Integer read GetWidth write SetWidth;
   property Height: Integer read GetHeight write SetHeight;
   property Size: TSize read GetSize write SetSize;
   property Location: TPoint read GetLocation write SetLocation;
?


Inovet   (2012-10-24 22:19:00) [4]

> [20] Сергей М. ©   (24.10.12 21:25)

Не, это я в обоих случаях об объектах классов на стеке, точнее об отсутсвии такой возможности.


Сергей М.   (2012-10-24 21:25:00) [5]


> Inovet ©   (24.10.12 11:24) [18]


Мне не понятно что ты подразумеваешь под "защитой от дурака" в дан.случае ..


> Принципиальных ограничений архитектуры нет?


Ну как же нет, когда там нет "главного" - vmt и rtti ?


Плохиш   (2012-10-24 12:56:00) [6]


>  С понятиями TObject и class я познакомился когда они появились
> в ТП6.6 и Д1

С объектами я познакомился при появлении их в TP5.5 и сразу же понял, что именного этого мне и не хватало :-)


Inovet   (2012-10-24 11:24:00) [7]

> [16] Ega23 ©   (24.10.12 09:58)
> > Зачем не сделали размещение объектов классов на стеке?
>
> А нафига?

Чтобы Create/Destroy не делать

> [17] Сергей М. ©   (24.10.12 10:25)
> Никакого ж стека не хватит для хранения громадной кучи объектов
...
> Кому надо на стеке, тот пользует record'ы и object'ы (суть
> одно и то же), на свой страх и риск и с известными существенными
> ограничениями.

Т.е. только лишь защита от дурака? Принципиальных ограничений архитектуры нет?


Сергей М.   (2012-10-24 10:25:00) [8]


> Зачем не сделали размещение объектов классов на стеке?


Никакого ж стека не хватит для хранения громадной кучи объектов, создаваемых дельфийским приложением даже не самой суперпупералгоритмической сложности и масштаба)

Кому надо на стеке, тот пользует record'ы и object'ы (суть одно и то же), на свой страх и риск и с известными существенными ограничениями.


Ega23   (2012-10-24 09:58:00) [9]


> Зачем не сделали размещение объектов классов на стеке?

А нафига?


Inovet   (2012-10-24 08:24:00) [10]

Зачем не сделали размещение объектов классов на стеке?


брат Птибурдукова   (2012-10-24 07:52:00) [11]

В общем, сначала нас убеждали, что object не нужен, устарел и поддерживается только из совместимости, а затем ввели ещё один его аналог... %-)


Ega23   (2012-10-24 07:44:00) [12]


> Так что ты хотел этим примером сказать?

Что тот object и этот record с методами, по сути, одно и то же.


Германн   (2012-10-24 03:11:00) [13]


> Ega23 ©   (24.10.12 02:57) [11]
>
>
> > То что в паскале появились классы? Или что-то ещё?
>
>
> TMyType = object
>  ...
> end;
>
> TMyType = class
>  ...
> end;
>
> Разница есть?

Есть, но очень небольшая.
Так что ты хотел этим примером сказать?


Ega23   (2012-10-24 02:57:00) [14]


> То что в паскале появились классы? Или что-то ещё?


TMyType = object
 ...
end;

TMyType = class
 ...
end;

Разница есть?


Германн   (2012-10-24 02:50:00) [15]


> Я имел ввиду это:
> type
>  TMyType = object
>   ....
>  end;
>

Что "это" ты имел ввиду?
То что в паскале появились классы? Или что-то ещё?


Ega23   (2012-10-24 02:18:00) [16]


> С понятиями TObject и class я познакомился когда они появились
> в ТП6.6 и Д1 и после ознакомления принял их такими какие
> они есть. Но вот с понятием record я познакомился гораздо
> раньше, чем оно приняло свой современный вид.


Я имел ввиду это:
type
 TMyType = object
  ....
 end;


Германн   (2012-10-24 02:11:00) [17]


> Дмитрий С ©   (24.10.12 01:12) [6]
>
>
> > Вот меня несколько лет назад ввело в ступор появление
> методов
> > у записей. :)
>
> А что такого? Помоему убобно)
>

Удобно ли - это ещё тот вопрос. :)


Германн   (2012-10-24 01:30:00) [18]


> Ega23 ©   (23.10.12 17:57) [5]
>
>
> > Вот меня несколько лет назад ввело в ступор появление
> методов
> > у записей. :)
> >
>
>
> А раньше object тебя не вводило в ступор?
>

Нет не вводило. С понятиями TObjectи classя познакомился когда они появились в ТП6.6 и Д1 и после ознакомления принял их такими какие они есть. Но вот с понятием recordя познакомился гораздо раньше, чем оно приняло свой современный вид. И долго не мог понять что и как и зачем это было нужно?
И только очень недавно я это понял случайно ознакомившись с тем как реализованы знакомые мне давно стандартные типы-записи TPointи TRect. Может и не правильно или не совсем правильно понял.


Дмитрий С   (2012-10-24 01:12:00) [19]


> Вот меня несколько лет назад ввело в ступор появление методов
> у записей. :)

А что такого? Помоему убобно)


Ega23   (2012-10-23 17:57:00) [20]


> Вот меня несколько лет назад ввело в ступор появление методов
> у записей. :)
>


А раньше object тебя не вводило в ступор?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо