![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Классы
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;
Вы можете объяснить ценность этой ахинеи?
То, что она работоспособна - спору нет.
но зачем это?!