Форум: "Начинающим";
Текущий архив: 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