Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];

Вниз

какие различия между 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
2-1166024304
Новичек
2006-12-13 18:38
2007.01.07
JMS в Delphi


9-1141459817
NightLord
2006-03-04 11:10
2007.01.07
PlugInIntf из GLScene


15-1166452413
Reactor
2006-12-18 17:33
2007.01.07
Аксесс, результат запроса в переменную


2-1166287995
BUHALOSS
2006-12-16 19:53
2007.01.07
Отловить клик мыши


15-1166385056
jack128
2006-12-17 22:50
2007.01.07
XL Report





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский