Wenn du meinst, dass du den Speicher löschen und freigeben möchtest, um sicherzustellen, dass nichts mehr im Speicher verbleibt, benutze die Funktion ZeroMemory() und gebe den Speicher danach mittels delete frei. Soviel ich weiß kann man einen Destruktor (oder sollte es zumindest nicht) von Hand aufrufen, da das nicht funktioniert.
1: Einen Destruktor kann man von Hand aufrufen.
2: Einen Speicherbereich mit Nullen zu überschreiben um ihn anschließend zu löschen ist vollkommen sinnlos (dann kann man ihn ja auch direkt löschen)
Wenn auf jedem Fall nur Zeiger gespeichert werden, dann solltest du 1. statt dem template einfach void* als Datentyp verwenden und 2. delete verwenden
Wenn aber nicht nur Zeiger gespeichert werden sollen, dann solltest du das am besten garnicht beachten. Dass das es sich um Zeiger handelt ist dann ein Spezialfall, den du nicht beachten kannst/solltest (dass wollte David_pb wohl auch sagen).
Um das freigeben des Speichers muss sich dann der Anwender selbst kümmern, was auch gut so ist, denn es könnte ja mal notwendig sein, den Speicher auf den der Zeiger zeigt nicht direkt beim löschen freizugeben, weil er zum Beispiel noch woanders verwendet wird.
Wenn du dieses Löschen nur für einen bestimmten (Zeiger-)typ brauchst, dann könntest du auch eine Spezialisierung für diesen Typ erstellen.