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

Вниз

Способ хранения объектов в памяти   Найти похожие ветки 

 
Verner ©   (2012-10-21 11:04) [0]

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

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

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

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

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


 
Inovet ©   (2012-10-21 11:30) [1]

> [0] Verner ©   (21.10.12 11:04)
> Если таких методов в памяти будет столько же, сколько и объектов

Так эта. Метод он всегда в памяти один. Основы надо бы понять.


 
Verner ©   (2012-10-21 11:56) [2]

Inovet, благодарю.


 
MetalFan ©   (2012-10-21 22:50) [3]

Метод один, объекты разные. "Основы надо бы понять" (с)


 
Германн ©   (2012-10-22 02:25) [4]


> MetalFan ©   (21.10.12 22:50) [3]
>
> Метод один, объекты разные. "Основы надо бы понять" (с)
>

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


 
Ega23 ©   (2012-10-23 17:57) [5]


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


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


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


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

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


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


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

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


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


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

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


 
Ega23 ©   (2012-10-24 02:18) [9]


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


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


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


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

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


 
Ega23 ©   (2012-10-24 02:57) [11]


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


TMyType = object
 ...
end;

TMyType = class
 ...
end;

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


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


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

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


 
Ega23 ©   (2012-10-24 07:44) [13]


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

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


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

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


 
Inovet ©   (2012-10-24 08:24) [15]

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


 
Ega23 ©   (2012-10-24 09:58) [16]


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

А нафига?


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


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


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

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


 
Inovet ©   (2012-10-24 11:24) [18]

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

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

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

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


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


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

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


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


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


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


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


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


 
Inovet ©   (2012-10-24 22:19) [21]

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

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


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


> 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;
?


 
MetalFan ©   (2012-10-29 12:18) [23]


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

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


 
Ega23 ©   (2012-10-29 15:35) [24]


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


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



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

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

Наверх




Память: 0.53 MB
Время: 0.005 c
3-1313671934
reekoxela
2011-08-18 16:52
2017.06.11
Как оповестить клиентов СУБД об изменении данных?


4-1282335043
sfary
2010-08-21 00:10
2017.06.11
Ловушка на запуск файлов. Hook на CreateProcess


15-1462732945
Inovet
2016-05-08 21:42
2017.06.11
Вот и 9 Мая!


2-1443529753
alvlts1
2015-09-29 15:29
2017.06.11
Вопрос про точки останова.


2-1443631313
Валя
2015-09-30 19:41
2017.06.11
доступ до БД Oracle