Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
ВнизКорректное "не создание" класса Найти похожие ветки
← →
learner © (2006-06-15 21:00) [0]Подскажите, пожалуйста, как корректно не создать класс
и как подчистить за собой ?type
TMyClass=class (TSomeClass)
private
public
constructor Create(AOwner: TComponent); override;
published
end;
implementation
constructor TMyClass.Create(AOwner: TSomeClass);
begin
if TestMyConditions then inherited Create(AOwner);
end;
procedure Test;
var
MyClass:TMyClass;
begin
MyClass:=TMyClass.Create(nil);
// Как узнать, что объект не создан и
end;
← →
Leonid Troyanovsky © (2006-06-15 21:26) [1]
> learner © (15.06.06 21:00)
> if TestMyConditions then inherited Create(AOwner);
if not TestMyConditions then
raise EMyException.Create(..);
inherited;
--
Regards, LVT.
← →
Loginov Dmitry © (2006-06-15 21:34) [2]
procedure Test;
var
MyClass:TMyClass;
begin
if not TestMyConditions then
MyClass:=TMyClass.Create(nil);
end;
← →
Desdechado © (2006-06-15 22:59) [3]if( myvar=nil ) then Не создан
← →
Джо © (2006-06-15 23:30) [4]> [3] Desdechado © (15.06.06 22:59)
> if( myvar=nil ) then Не создан
Это вряд ли.
← →
learner © (2006-06-16 01:28) [5]Спасибо всем !
← →
Desdechado © (2006-06-16 13:39) [6]Джо © (15.06.06 23:30) [4]
Почему?
Если не создался, то переменная (если была nil) будет nil.
Понятно, что исключения скорее всего будут при несоздании. Но ведь их можно обработать, а код можно и дальше заставить работать даже при несозданном объекте (если этот код не использует этот объект).
← →
Пусик © (2006-06-16 19:45) [7]
TMyClass=class
public
class function CreateMyClass(Value: Boolean): TMyClass;
end;
{ TMyClass }
class function TMyClass.CreateMyClass(Value: Boolean): TMyClass;
begin
Result := nil;
if Value then Result := TMyClass.Create;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Obj: TMyClass;
begin
Obj := TMyClass.CreateMyClass(False);
if Assigned(Obj) then Obj.Free;
end;
← →
Leonid Troyanovsky © (2006-06-16 20:00) [8]
> Пусик © (16.06.06 19:45) [7]
Вот, скажи мне, любезный Пусик, к чему столь
приумножать сущности?
--
Regards, LVT.
← →
Пусик © (2006-06-16 20:02) [9]
> Leonid Troyanovsky © (16.06.06 20:00) [8]
>
>
> > Пусик © (16.06.06 19:45) [7]
>
>
> Вот, скажи мне, любезный Пусик, к чему столь
> приумножать сущности?
>
> --
> Regards, LVT.
А где сущности приумножены?
И в котором постинге есть пример без приумножения?
← →
Leonid Troyanovsky © (2006-06-16 20:04) [10]
> Пусик © (16.06.06 20:02) [9]
> А где сущности приумножены?
В [7]
> И в котором постинге есть пример без приумножения?
[1], [2].
--
Regards, LVT.
← →
Пусик © (2006-06-16 20:08) [11]
> Leonid Troyanovsky © (16.06.06 20:04) [10]
Что касается [1].
Поднять исключение - это не лишняя сущность? Вообще-то исключение - довольно медлительная операция.
Что касается [2].
Почти тот же вид, только сбоку.
Лучше самому классу отдать на откуп, создаваться ему или нет, вместо того, чтобы использовать для этого отдельную функцию.
Пусть лучше класс будет самодостаточным. Или это не так?
Если не так, тогда в чем тут соль?
← →
Leonid Troyanovsky © (2006-06-16 20:20) [12]
> Пусик © (16.06.06 20:08) [11]
> Поднять исключение - это не лишняя сущность? Вообще-то исключение
> - довольно медлительная операция.
А куда спешить? :)
А насчет лишнего - вроде, ничего нет.
Бо, в соответствии с ТЗ:
- сообщит, что объект не создан
- приведет к вызову деструктора, который и уничжтожит то,
что требуется уничтожать.
--
Regards, LVT.
← →
Пусик © (2006-06-16 20:26) [13]
> Leonid Troyanovsky © (16.06.06 20:20) [12]
>
>
> > Пусик © (16.06.06 20:08) [11]
>
> > Поднять исключение - это не лишняя сущность? Вообще-то
> исключение
> > - довольно медлительная операция.
>
>
> А куда спешить? :)
Вообще, создание класса может занимать достаточное время(родительский - при inherited). Это тоже надо учитывать.
Кроме того, объекты могут создаваться множество раз, и в этом случае зачем лишний раз замедлять свою программу. Я считаю, что здесь не всегда оправдано использование исключений.
По поводу того, что деструктор уничтожит.
А зачем уничтожать, если можно не создавать? Это не лишняя сущность?
← →
Leonid Troyanovsky © (2006-06-16 20:38) [14]
> Пусик © (16.06.06 20:26) [13]
> Вообще, создание класса может занимать достаточное время(родительский
> - при inherited). Это тоже надо учитывать.
Вообще-то, исключение - это, все же, исключение.
Ну, а место для inherited зависит от.
> А зачем уничтожать, если можно не создавать? Это не лишняя
> сущность?
В момент поднятия исключения в конструкторе может быть
уже создано нечто необходимое объекту.
Ну, а деструктор - это правильное место для уничтожения оного.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c