Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.07;
Скачать: CL | DM;

Вниз

какие различия между Free и Destroy? как грамотно разрушить?   Найти похожие ветки 

 
Dmytro   (2006-12-19 16:28) [0]

какие различия между Free и Destroy? как грамотно разрушить созданный объект?


 
Desdechado ©   (2006-12-19 16:30) [1]

Если открыть справку по Free, можно увидеть разницу.


 
Anatoly Podgoretsky ©   (2006-12-19 16:30) [2]

> Dmytro  (19.12.2006 16:28:00)  [0]

Первым и в справке четко написано - никогда не вызывайти Destroy напрямую


 
Джо ©   (2006-12-19 16:38) [3]

> [0] Dmytro   (19.12.06 16:28)
> какие различия между Free и Destroy?

Удерживая Сtrl, щелкни на методе Free где-нибудь в исходнике и ты увидишь, как она реализована.


 
Loginov Dmitry ©   (2006-12-19 17:39) [4]

Free - безопасный метод, который компилятор разрешает применять даже к нулевому указателю.


 
StriderMan ©   (2006-12-19 17:41) [5]


procedure TObject.Free;
begin
 if Self <> nil then
   Destroy;
end;

вот собственно и вся разница


 
Loginov Dmitry ©   (2006-12-19 17:51) [6]

> вот собственно и вся разница


С учетом, что это частный случай, при котором компилятор разрешает передачу в метод нулевого Self.


 
Джо ©   (2006-12-19 18:04) [7]

> [6] Loginov Dmitry ©   (19.12.06 17:51)
> > вот собственно и вся разница
>
>
> С учетом, что это частный случай, при котором компилятор
> разрешает передачу в метод нулевого Self.

Компилятору это безразлично.


 
Loginov Dmitry ©   (2006-12-19 20:07) [8]

Блин, и вправду безразлично.
По ходу я тестировал для виртуальных методов и поэтому получал пинок.
А в статические методы 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;


 
Kolan ©   (2006-12-19 20:16) [9]

> А в статические методы Self можно передавать любой

Как это "передавть" Self?


 
Джо ©   (2006-12-19 20:36) [10]

> [8] Loginov Dmitry ©   (19.12.06 20:07)
> Блин, и вправду безразлично.
> По ходу я тестировал для виртуальных методов и поэтому получал
> пинок.
> А в статические методы Self можно передавать любой :)

Фактически, все, что нужно знать, для вызова статического метода, это только ссылку на класс, а не экземпляр. Вызов статического метода транслируется в вызов TMyObj.SomeMethod, а не в MyObj.SomeMethod.


 
tesseract ©   (2006-12-19 20:44) [11]


> Фактически, все, что нужно знать, для вызова статического
> метода, это только ссылку на класс, а не экземпляр. Вызов
> статического метода транслируется в вызов TMyObj.SomeMethod,
>  а не в MyObj.SomeMethod.


Вроде достаточно знать адрес метода?

ЗЫ: Классовые методы, каковыми являються конструкторы, деструкторы и др. можно вызывать без всякой подобной канители.



Страницы: 1 вся ветка

Текущий архив: 2007.01.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
15-1166436664
Dekan
2006-12-18 13:11
2007.01.07
Socks 5 server


15-1166087509
boriskb
2006-12-14 12:11
2007.01.07
Подзаработать что ли?


11-1142886978
GMax
2006-03-20 23:36
2007.01.07
TabControl + Tab Key :)


2-1166293515
Галинка
2006-12-16 21:25
2007.01.07
DecimalSeparator &amp; c#


15-1166345397
Павел Калугин
2006-12-17 11:49
2007.01.07
Помогите студиозусу...