Don't forget good old Ada.
"Finalize" on objects of type "Ada.Finalization.Controlled".
I mean, yes, those words are in there, but I'm responding to your words:
> Ada does not have destructors or anything analogous.
Which are factually wrong. Finalize is called automatically (per the link). And they are exactly what you say Ada lacks, analogues of destructors.
Your complaint, now, is that Finalize and Initialize don't automatically call the same functions in the parent. That's a separate issue, and doesn't demonstrate that Ada doesn't have this thing (a variant of destructors) which it very clearly has.