![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
какие различия между Free и Destroy? как грамотно разрушить? [D2005, 2000]
Dmytro © (2006-12-19 16:28:00)какие различия между Free и Destroy? как грамотно разрушить созданный объект?
tesseract (2006-12-19 20:44:00) [1]
> Фактически, все, что нужно знать, для вызова статического
> метода, это только ссылку на класс, а не экземпляр. Вызов
> статического метода транслируется в вызов TMyObj.SomeMethod,
> а не в MyObj.SomeMethod.
Вроде достаточно знать адрес метода?
ЗЫ: Классовые методы, каковыми являються конструкторы, деструкторы и др. можно вызывать без всякой подобной канители.
Джо (2006-12-19 20:36:00) [2]> [8] Loginov Dmitry © (19.12.06 20:07)
> Блин, и вправду безразлично.
> По ходу я тестировал для виртуальных методов и поэтому получал
> пинок.
> А в статические методы Self можно передавать любой :)
Фактически, все, что нужно знать, для вызова статического метода, это только ссылку на класс, а не экземпляр. Вызов статического метода транслируется в вызов TMyObj.SomeMethod, а не в MyObj.SomeMethod.
Kolan (2006-12-19 20:16:00) [3]> А в статические методы Self можно передавать любой
Как это "передавть" Self?
Loginov Dmitry (2006-12-19 20:07:00) [4]Блин, и вправду безразлично.
По ходу я тестировал для виртуальных методов и поэтому получал пинок.
А в статические методы Self можно передавать любой :)
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyObj = class
procedure Kuku;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyObj }
procedure TMyObj.Kuku;
begin
if Self <> nil then
Windows.Beep(500, 100);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyObj: TMyObj;
begin
MyObj := TMyObj(111);
MyObj.Kuku; // Передаем в метод в качестве Self любой мусор
end;
Джо (2006-12-19 18:04:00) [5]> [6] Loginov Dmitry © (19.12.06 17:51)
> > вот собственно и вся разница
>
>
> С учетом, что это частный случай, при котором компилятор
> разрешает передачу в метод нулевого Self.
Компилятору это безразлично.
Loginov Dmitry (2006-12-19 17:51:00) [6]> вот собственно и вся разница
С учетом, что это частный случай, при котором компилятор разрешает передачу в метод нулевого Self.
StriderMan (2006-12-19 17:41:00) [7]
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
вот собственно и вся разница
Loginov Dmitry (2006-12-19 17:39:00) [8]Free - безопасный метод, который компилятор разрешает применять даже к нулевому указателю.
Джо (2006-12-19 16:38:00) [9]> [0] Dmytro (19.12.06 16:28)
> какие различия между Free и Destroy?
Удерживая Сtrl, щелкни на методе Free где-нибудь в исходнике и ты увидишь, как она реализована.
Desdechado (2006-12-19 16:30:00) [10]Если открыть справку по Free, можно увидеть разницу.
Anatoly Podgoretsky (2006-12-19 16:30:00) [11]> Dmytro (19.12.2006 16:28:00) [0]
Первым и в справке четко написано - никогда не вызывайти Destroy напрямую