Direkt aufrufen kannst du ihn auch, das solltest du aber nur tun, wenn du genau weisst, was du tust. In 99.9% der Fälle musst du das aber nie.
Ein Destruktor wird aufgerufen, wenn ein Objekt zerstört wird. Das kann jetzt automatisch passieren, wenn du ein Objekt auf dem Stack erzeugt hast und der Scope verlassen wird (ein Objekt innerhalb einer Funktion zum Beispiel).
Er wird auch aufgerufen, wenn du ein Objekt mit new erzeugt hast und delete darauf aufrufst.
In beiden Fällen wird er aber nicht direkt aufgerufen, sondern indirekt.