По определению, конструктор вызывается только один раз, когда объект создается. Если у вас есть доступ к объекту, значит, он должен быть создан, поэтому вы не можете снова вызывать конструктор - это причина, по которой явные вызовы конструктора не допускаются. Точно так же деструкторы должны вызываться только один раз, когда объект уничтожен. Если бы это всегда можно было сделать автоматически, язык также запретил бы явные вызовы деструкторов.
Однако в некоторых случаях вам может потребоваться точный контроль над управлением памятью и возможность явного создания и уничтожения объектов в памяти, которой вы управляете. Для этой цели язык предоставляет «размещение нового» для создания объекта в произвольном месте, и явные вызовы деструктора для уничтожения созданных таким образом объектов. Явный вызов конструктора не будет полезен, поскольку вам нужно уметь указывать местоположение нового объекта - так что вместо этого вы получаете «размещение нового». Достаточно явного вызова деструктора, поэтому нет необходимости изобретать какое-то подходящее «размещение удаления».
Итак: нет допустимого использования для явных вызовов конструктора, поэтому они недопустимы. Существует явное использование для явных вызовов деструкторов, поэтому они (синтаксически) разрешены, с правилом, что вы должны когда-либо использовать их только на объектах, которые иначе не будут уничтожены, т.е. на объектах, созданных с использованием «размещения нового», и Случай, позвоните им ровно один раз. Использование их любым другим способом, как и многие ошибки C ++, скомпилирует, но даст неопределенное поведение.