Форум: "Основная";
Текущий архив: 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