AFAIK
1: You must call the constructor of the class to create the Virtual Method Table, but it can be an inherited one, you do not need a separate one. Since in Pascal you can name the constructor the way you want, it is not an issue (unlike C++ where the constructor has the name of the class and hence you need one for your own class type).
2: In general you do not need it. Still if there are any newly introduced elements (i.e. not from an ancestor) of the class that need to be freed up, then you need one, as a local pointer variable (including a non-pointer looking variable holding a class instance) holding any memory is not freed automatically. Make sure, if you have a descendant destructor, call from it the inherited destructor as well, something like:
destructor TMyChildForm.Destruct;
begin
// do what you want
inherited Destroy;
end;
3: It is not a good practice to call the destructor at all. Call Free instead. Free is a class method and it checks that the object pointer is not nil, and only then calls Destroy. This can prevent lots of crashes. Be also aware that MyChildForm.Free does not nil the MyChildForm variable holding the class instance (a sort-of pointer). So if you call Free twice you can have a problem. If that risk is valid then call FreeAndNil(MyChildForm) instead.
4: Theoretically you can call the destructor even from a method of the same class, but again, it is better never to call the destructor directly at all. Also make sure that you do not use anything freed in Destroy after you called it. It can be tricky, so be careful, but you can do it.
There is a long write-up about the way objects, classes and alike work under
https://github.com/zsoltszakaly/OOPstructuresinpascal, might worth reading.