Приветствую.
Изучаю делфи и наткнулся на такую задачку: нужно очистить память, занимаемую свойствами экземпляра класса при закрытии формы.
Реализация такая (названия, естественно, выдуманные):
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ExtDlgs, ComCtrls;
type
TForm1 = class(TForm)
...
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
MyClass = class
St_L1, St_L2: TStringList;
constructor Create();
end;
MainClass = class
MyStrings: MyClass;
...
procedure CreateMyClass();
end;
var
MC: MainClass;
implementation
{$R *.dfm}
constructor MyClass.Create();
begin
St_L1 := TStringList.Create;
St_L2 := TStringList.Create;
end;
destructor MyClass.Destroy();
begin
St_L2 .Free;
St_L2 .Free;
end;
procedure MainClass.CreateMyClass();
begin
MyStrings := MyClass.Create();
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MC.CreateMyClass();
end;
// ...
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MC.Destroy();
end;
end.
Есть смысл вообще писать деструктор для
MyClass, если я экземпляр MC в конце уничтожаю => память, занимаемая двумя
TStringList-ами, автоматом очищается в принципе? Если есть придирки к реализации, то прошу их вынести на всеобщее обозрение, так как учусь.
P.S. Такая реализация была выбрана из-за того, что хочу делать обращения к свойствам и методам моих дочерних классов через свой главный, "глобальный" класс (в данном случае, это
MainClass)
Спасибо.
UPDATE продолжение 4-го вопроса
type
Books = class
Title: String;
Author: String;
PublYear: Integer;
constructor Create(Title: String; Author: String; PublYear: Integer);
end;
Library = class
Book: array [1..100] of Books;
Counter;
constructor Create();
procedure AddBook(T: String; A: String; PY: Integer);
function GetBookTitle(N: Integer): String;
end;
constructor Create(Title: String; Author: String; PublYear: Integer);
begin
self.Title := Title;
self.Author := Author;
self.PublYear := PublYear;
end;
constructor Library.Create();
begin
Counter := 0;
end;
procedure Library.AddBook(T: String; A: String; PY: Integer);
begin
Counter := Counter + 1;
Book[Counter] := Books.Create(T, A, PY);
end;
function GetBookTitle(N: Integer): String;
begin
Result := Book[N].Title;
end;
var
LB: Library;
begin
LB := Library.Create();
LB.AddBook('Утиные истории', 'Дональд Дак', 2999);
ShowMessage(LB.GetBookTitle(1));
end.