Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.19.31.73] |
|
Сообщ.
#1
,
|
|
|
type Z = class constructor Create; overload; constructor Create(X: Integer); overload; end; constructor Z.Create; begin . . . end; constructor Z.Create(X: Integer); begin Create; . . . end; Два вопроса: 1. Можно ли так делать? Т.е. вызывать другой конструктор (без параметров) из конструктора (с параметрами). Не будет ли создано лишнего объекта? Если это некорректная запись, как тогда поступать в этих случаях? 2. Если объект уже создан A := Z.Create; и я решу вызвать конструктор ещё раз, но вот так: A.Create; – будет ли это корректно? Или будет создан ещё один объект? Добавлено Ну и заодно 3-й вопрос: d чём принципиальная разница между type Z = class type Z = class(TObject) Без TObject у Z всё равно будут те же свойства и методы... |
Сообщ.
#2
,
|
|
|
Цитата Jin X @ 1. Можно ли так делать? Т.е. вызывать другой конструктор (без параметров) из конструктора (с параметрами). Не будет ли создано лишнего объекта? Если это некорректная запись, как тогда поступать в этих случаях? да эквивалентно self.create (т.е. вызов для экземпляра, а не класса, без выделения памяти) только чаще наоборот, дефолтный (без параметров) вызывает конструктор с параметрами Цитата Jin X @ 2. Если объект уже создан A := Z.Create; и я решу вызвать конструктор ещё раз, но вот так: A.Create; – будет ли это корректно? Или будет создан ещё один объект? технически да/не будет создан, но так никто не делает потому что, если в первом случае (при вызове из конструктора) ты вызываешь код который написал сам и знаешь, что он делает во втором случае А, в общем случае, экземпляр любого класса и что в нём написано неизвестно например: X:=GetMem и тогда будет утечка а так (в конструкторе): if Assigned(X) then FreeMem(X); X:=GetMem обычно не пишут Цитата Jin X @ Ну и заодно 3-й вопрос: d чём принципиальная разница между разницы никакой, корень всегда TObject аналогично для интерфейсов: IInterface |
Сообщ.
#3
,
|
|
|
Цитата Shaggy @ В данном случае я хочу как раз сделать unit, в котором можно было бы вызывать конструктор несколько раз. Чтобы не плодить аналогичные по функционалу процедуры, но с другими названиями во втором случае А, в общем случае, экземпляр любого класса и что в нём написано неизвестно |
Сообщ.
#4
,
|
|
|
Тогда лучше их назвать Init, конструктор все-таки подразумевает однократный вызов. Другое использование возможно, но может запутать того, кто с этим кодом будет работать
|