Главная страница
    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
15-1166431387
Чапаев
2006-12-18 11:43
2007.01.07
Про IE


15-1166041883
palva
2006-12-13 23:31
2007.01.07
Изменить соотношение высоты и ширины картинки при просмотре AVI


2-1166355278
ezorcist
2006-12-17 14:34
2007.01.07
Вычисление интеграла.


2-1166214377
FIL-23
2006-12-15 23:26
2007.01.07
как узнать какая по счету линия в memo


3-1161369447
alex_sz
2006-10-20 22:37
2007.01.07
Размер базы *.gdb





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский