Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2017.06.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.002 c
2-1443123555
Gedevan
2015-09-24 22:39
2017.06.11
Как у класса наследника явным образом показать методы родителя


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


1-1350803047
Verner
2012-10-21 11:04
2017.06.11
Способ хранения объектов в памяти


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


15-1463088604
Юрий
2016-05-13 00:30
2017.06.11
С днем рождения ! 13 мая 2016 пятница





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский