Текущий архив: 2006.09.24;
Скачать: CL | DM;
ВнизAccess violation... Найти похожие ветки
← →
Patrick (2006-08-31 11:29) [0]Объясните, пожалуйста, такой момент. Фрагмент программы
procedure ...
var a:TSrings;
begin
...
a.Create;
...
a.Append("111"); - после этой строки "Access violation..."
...
end;
Заранее благодарен.
← →
Ega23 © (2006-08-31 11:31) [1]1. TStrings - абстрактный тип, нельзя создать его экземпляр. Создавай, например, TStringList.
2. Процесс создания объектов выглядит следующим образом:var
list:TstringList
list:=TStringList.Create;
....
← →
Ega23 © (2006-08-31 11:32) [2]
> абстрактный тип
абстрактный класс, конечно же.
← →
Reindeer Moss Eater © (2006-08-31 11:35) [3]var a:TSrings;
begin
...
a.Create;
Хоть бы и не абстрактный. Все равно так нельзя.
← →
Reindeer Moss Eater © (2006-08-31 11:36) [4]var a : TClassName;
begin
a:= TClassName.Create;
end;
← →
Barloggg (2006-09-01 12:29) [5]а если по русски то вместо
a.create;
надо делать так
a:=Tstrings.create;
и в конце не забыть
a.free;
а то может быть протечка.
← →
Ega23 © (2006-09-01 12:31) [6]
> надо делать так
> a:=Tstrings.create;
Вот так делать не надо в любом случае. TStrings - абстрактный класс. Я не знаю, можно ли создать его экземпляр (надо проверить), но даже если ты его создашь, то при работе с ним с вероятностью 99.999% нарвёшься на Abstract Error
← →
default © (2006-09-01 12:36) [7]меня вот что удивляет
мы обычно что-то изучая пользуемся чем-то, справкой, книгами и тд
неужели там про это не написано?
ведь взял же откуда-то класс TStrings!
← →
Плохиш © (2006-09-01 12:38) [8]
> default © (01.09.06 12:36) [7]
> меня вот что удивляет
> мы обычно что-то изучая пользуемся чем-то, справкой, книгами
> и тд
Хм, вроде давно здесь обитает, а всё удивляется :-)
← →
Джо © (2006-09-01 12:44) [9]
> Barloggg (01.09.06 12:29) [5]
> а то может быть протечка.
А что это? ;>
← →
Barloggg (2006-09-01 12:57) [10]хмм... я так спокойно assign"ил поля типа Tstring от одного объекта к другому... и даже временный
var a:Tstrings;...
объект задавал (правда не создавал) присваиванием от готового компонента. (дабы не писать сто раз конструкцию типа form1.listbox1. ...)
И я даже прочел что он виртуальный, но насколько я понимаю это значит просто нет большинства методов,и их все в обязательном порядке надо перекрывать у потомков, но сам список-то на месте.
так что почему бы не создать экземляр? но иметь ввиду что он на "ручном управлении".
← →
Barloggg (2006-09-01 13:00) [11]протечка? утечка памяти.
если объект создать, а потом его приравнять его к nil то кто его знает убьется он сам или нет.
а если не убьется, то так и будет висеть в оперативке у винды, а потом уйдет в свап файл но до перезагрузки не исчезнет.
← →
StriderMan © (2006-09-01 13:01) [12]
> Barloggg (01.09.06 12:57) [10]
у реальных объектов свойства типа TStrings являются на самом деле его потомками, хотя объявлены как TStrings. А сделано это как раз для того чтобы
> я так спокойно assign"ил поля типа Tstring от одного объекта
> к другому... и даже временный
> var a:Tstrings;...
← →
StriderMan © (2006-09-01 13:02) [13]
> Barloggg (01.09.06 13:00) [11]
> протечка? утечка памяти. его к nil то
> кто его знает убьется он сам или нет.
сам не убьется. просто ссылку на него прибьешь, а объект останется.
для убивания объектов существует метод TObject.Free
← →
default © (2006-09-01 13:03) [14]Barloggg (01.09.06 12:57) [10]
см. литературу по ООП идеологии
присваивать переменной абстрактного класса можно любые объекты классов-наследников от этого абстрактного и работать через эту переменную с ними
← →
Barloggg (2006-09-01 13:03) [15]ну на то он и Дельфи, чтобы иметь красивые стены и неявную подчистку хвостов (уж не помню откуда я это вычитал, но автор статьи говорил уверенно).
← →
default © (2006-09-01 13:06) [16]Barloggg (01.09.06 13:00) [11]
какая перезагрузка? ресурсы созданные в рамках некоторо процесса убиваются после завершения этого процесса(файлы созданные естественно не стираются:) и др естественные вещи:) )
← →
Barloggg (2006-09-01 13:07) [17]
> ресурсы созданные в рамках некоторо процесса убиваются после
> завершения этого процесса
да, убиваются. в WinNT и выше. в Win9x остаются.
← →
Ega23 © (2006-09-01 13:30) [18]
> если объект создать, а потом его приравнять его к nil то
> кто его знает убьется он сам или нет.
Не убъётся.
> хмм... я так спокойно assign"ил поля типа Tstring от одного
> объекта к другому... и даже временный
> var a:Tstrings;...
> объект задавал (правда не создавал) присваиванием от готового
> компонента. (дабы не писать сто раз конструкцию типа form1.
> listbox1. ...)
Именно для этого абстрактные классы и существуют.
type
TGraphicObject=class
protected
procedure Draw(Canvas:TCanvas); abstract;
end;
TLine=class(TGraphicObject)
public
procedure Draw(Canvas:TCanvas); override;
end;
TCircle=class(TGraphicObject)
public
procedure Draw(Canvas:TCanvas); override;
end;
procedure TLine.Draw(Canvas:TCanvas)
begin
With Canvas do
begin
MoveTo(....)
LineTo(....)
end;
end;
procedure TCircle.Draw(Canvas:TCanvas)
begin
With Canvas do
begin
MoveTo(....)
Ellipse(....)
end;
end;
Теперь в основной программе я создаю список GraphItems:TObjectList, а также
по экзепляру (или несколько экземпляров) TLine и TCircle:
GraphItems.Add(TLine.Create) или GraphItems.Add(TCircle.Create)
А теперь внимание: рисуем всё
for i:=0 to GraphItems.Count-1 do
TGraphicObject(GraphItems.Items[i]).Draw(form1.Image1.Canvas)
И для перерисовки уже неважно, линия это, круг или ещё какой-нибудь квадрат. Они все потомки TGraphicObject, а значит у всех есть СВОЯ(!) реализация метода Draw.
← →
ANB © (2006-09-01 13:45) [19]
> да, убиваются. в WinNT и выше. в Win9x остаются.
Может лучше Рихтера почитать ?
← →
Anatoly Podgoretsky © (2006-09-01 19:32) [20]Reindeer Moss Eater © (31.08.06 11:35) [3]
Можно, но надо уметь.
← →
Ketmar © (2006-09-01 19:57) [21]> [17] Barloggg (01.09.06 13:07)
автор, пиши ещё! лучше -- книги.
← →
Loginov Dmitry © (2006-09-01 22:22) [22]> Ega23 © (01.09.06 13:30) [18]
имхо, для пущей красоты не мешало бы добавить перед abstract ключевое слово virtual, ибоAbstract methods must be virtual or dynamic
Страницы: 1 вся ветка
Текущий архив: 2006.09.24;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.04 c