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

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

Классы


Страницы:   1 2 3 4

student_92 ©   (2011-01-12 11:31:00) 

нужно ли в конструкторе вызывать inherited Create


type
 TMyClass = class(TObject)
 { ... }
 public
   { ... }
   constructor Create(const AItemName: string);
   { ... }
 end;

constructor TMyClass.Create(const AItemName: string);
begin
 inherited Create; // <- ?
 { ... }
end;


oxffff   (2011-01-15 09:41:00) [1]


> В чем ценность делать это вызовом метода с именем Create?
>  вот что хочется узнать.


Если сложно абстрагироваться от конструктора и реинициализатора я ничем помочь не смогу.


oxffff   (2011-01-15 09:39:00) [2]


> _Юрий   (14.01.11 22:58) [75]
>
> > oxffff ©   (14.01.11 22:14) [72]
>
>
> > Кто-нибудь оценил? :)
> >
>
>
> Оценил. Геморрой, а сколько нибудь существенного выигрыша
> в скорости нету.


Без комментариев.


oxffff   (2011-01-15 09:38:00) [3]


> KSergey ©   (14.01.11 22:17) [73]
> oxffff ©   (14.01.11 21:50) [62]
> > 31 vs 359.
>
> Ну сравнили несравнимое, и что?
> Речь о другом: зачем на конструктор навешивать совершенно
> неожиданную функциональность?
> Если внутри цикла нужна просто переинициализация (очистка)
> обхекта - ну так и вызвать метод Clear, что всем будет очевидно.
>
> В чем ценность делать это вызовом метода с именем Create?
>  вот что хочется узнать.
>
> Это улучшит читабельность кода? это облегчит его сопровождение?
>  что данный код изменит в мире к лучшему?


Да ничего не изменит. Тренируй свой мозг.


Leonid Troyanovsky   (2011-01-14 23:00:00) [4]


> _Юрий   (14.01.11 21:53) [64]

> бы иметь возможность вызова и деструктора не как деструктора,
>  а как просто метода, без разрушения экземпляра. Может быть,
>  кто-то хочет просто сбросить инициализацию.

Трехмерные случайные блуждания невозвратны.

--
Regards, LVT.


_Юрий   (2011-01-14 22:58:00) [5]


> oxffff ©   (14.01.11 22:14) [72]


> Кто-нибудь оценил? :)
>


Оценил. Геморрой, а сколько нибудь существенного выигрыша в скорости нету.
По приведенному коду:
это ни что иное, как способы выстрелить себе в ногу. Причем кнопка, запускаюшая пулю, называется "зарядить ружье"


Игорь Шевченко   (2011-01-14 22:20:00) [6]

oxffff ©   (14.01.11 22:01) [69]


> Помнится давным давно мы с Вами обсуждали class helpers
> и вы выступали против них


Я выступаю не против class helpers, я выступаю за принцип - делай проще.


KSergey   (2011-01-14 22:17:00) [7]

oxffff ©   (14.01.11 21:50) [62]
> 31 vs 359.

Ну сравнили несравнимое, и что?
Речь о другом: зачем на конструктор навешивать совершенно неожиданную функциональность?
Если внутри цикла нужна просто переинициализация (очистка) обхекта - ну так и вызвать метод Clear, что всем будет очевидно.
В чем ценность делать это вызовом метода с именем Create? вот что хочется узнать.

Это улучшит читабельность кода? это облегчит его сопровождение? что данный код изменит в мире к лучшему?


oxffff   (2011-01-14 22:14:00) [8]

Даже в hepl'e написано хотите скорости аллокации и деаллокации делайте пул объектов и перекрывайте NewInstance и FreeInstance.
Кто-нибудь оценил? :)


oxffff   (2011-01-14 22:08:00) [9]


> DiamondShark ©   (14.01.11 22:02) [70]
>
> > oxffff ©   (14.01.11 21:54) [65]
>
> Мне обещали "да полно". Я попросил три (это же намного меньше,
>  чем "да полно"). Дали один.
> Я считаю, что вопрос исчерпан без комментариев.
>
> А ты чего хотел? Польку-бабочку?


:) Да ничего я не хотел. Думал нормально обсудить по человечески.
А тут сразу. Да ты что навязывать собираешься и т.д.
Я же сразу привел пример с конструктором копий и оператором = и разницей между ними.
Просто привел сокращенный пример полезности виртуальности конструктора без введения дополнительного метода.
Делов то. А обвинили во всех смертных грехах.


DiamondShark   (2011-01-14 22:02:00) [10]


> oxffff ©   (14.01.11 21:54) [65]

Мне обещали "да полно". Я попросил три (это же намного меньше, чем "да полно"). Дали один.
Я считаю, что вопрос исчерпан без комментариев.

А ты чего хотел? Польку-бабочку?


oxffff   (2011-01-14 22:01:00) [11]


> Игорь Шевченко ©   (14.01.11 21:56) [66]
> oxffff ©   (14.01.11 21:50) [62]
>
> когда коту нечего делать...
>
> Как же задолбали теоретики, кто б знал.


Помнится давным давно мы с Вами обсуждали class helpers и вы выступали против них. Но прошло 2-3 года и вы их оценили.
Может каждому овощу свое время и место?


DiamondShark   (2011-01-14 21:57:00) [12]


> _Юрий   (14.01.11 21:53) [64]

Жжошь.

В новой версии YAR будет.


oxffff   (2011-01-14 21:57:00) [13]


> _Юрий   (14.01.11 21:53) [64]
> А если пойти дальше, то можно предположить, что неплохо
> бы иметь возможность вызова и деструктора не как деструктора,
>  а как просто метода, без разрушения экземпляра. Может быть,
>  кто-то хочет просто сбросить инициализацию.
>
> Надо будет написать предложение в Эмберкадэро, пусть расширят
> синтаксис


Если это нужно, то это можно сделать и сейчас по аналогии с .NET IDisposable с SuppressFinalize. Перекрыть FreeInstance и проверять флажок.
Повторяю, если это кому-либо пригодится.


Игорь Шевченко   (2011-01-14 21:56:00) [14]

oxffff ©   (14.01.11 21:50) [62]

когда коту нечего делать...

Как же задолбали теоретики, кто б знал.


oxffff   (2011-01-14 21:54:00) [15]


> DiamondShark ©   (14.01.11 21:51) [63]


А ты куда то слился когда тебе начинали приводить доводы с пользу реинициализация против повторного инстанцирования?


_Юрий   (2011-01-14 21:53:00) [16]

А если пойти дальше, то можно предположить, что неплохо бы иметь возможность вызова и деструктора не как деструктора, а как просто метода, без разрушения экземпляра. Может быть, кто-то хочет просто сбросить инициализацию.

Надо будет написать предложение в Эмберкадэро, пусть расширят синтаксис


DiamondShark   (2011-01-14 21:51:00) [17]

Удалено модератором


oxffff   (2011-01-14 21:50:00) [18]


> KSergey ©   (14.01.11 21:33) [60]
> > constructor TMytypeChild.create;
> > begin
> > inherited;
> > if assigned(List) then list.Clear else List:=TList.create;
>
> > end;
>
> Вы можете объяснить ценность этой ахинеи?
> То, что она работоспособна - спору нет.
> но зачем это?!


type

TMytype=class
constructor create;virtual;abstract;
end;

TMytypeChild=class(TMytype)
protected
List:TList;
constructor create;override;
destructor destroy;override;
end;

TMytypeChildFull=class(TMytype)
protected
List:TList;
constructor create;override;
destructor destroy;override;
end;

constructor TMytypeChild.create;
begin
inherited;
if assigned(List) then list.Clear else List:=TList.create;
end;

{ TMytypeChildFull }

constructor TMytypeChildFull.create;
begin
inherited;
List:=TList.create;
end;

destructor TMytypeChildFull.destroy;
begin
List.free;
inherited;
end;

destructor TMytypeChild.destroy;
begin
List.free;
inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Mytype:TMytype;
   i:integer;
   D,W:DWORD;
begin
D:=GetTickCount;
Mytype:=TMytypeChild.create;
for i:=0 to 1000000 do
 begin
 Mytype.create;
 end;
Mytype.free;
D:=GetTickCount-D;

W:=GetTickCount;
for i:=0 to 1000000 do
 begin
 Mytype:=TMytypeChildFull.create;
 Mytype.free;
 end;
W:=GetTickCount-W;
showmessage('D='+inttostr(D)+' W='+inttostr(W));
end;

31 vs 359.


oxffff   (2011-01-14 21:41:00) [19]


> KSergey ©   (14.01.11 21:33) [60]
> > constructor TMytypeChild.create;
> > begin
> > inherited;
> > if assigned(List) then list.Clear else List:=TList.create;
>
> > end;
>
> Вы можете объяснить ценность этой ахинеи?
> То, что она работоспособна - спору нет.
> но зачем это?!


Вокруг шум. Пусть так. Ни кипишуй. Всё ништяк.


KSergey   (2011-01-14 21:33:00) [20]

> constructor TMytypeChild.create;
> begin
> inherited;
> if assigned(List) then list.Clear else List:=TList.create;
> end;

Вы можете объяснить ценность этой ахинеи?
То, что она работоспособна - спору нет.
но зачем это?!


Страницы:   1 2 3 4

Наверх

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