Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

какие различия между 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 напрямую


Наверх

Титульная страница Поиск, карта сайта Написать письмо