Как говорится в комментарии, в результате поведение программы не определено.
Если у вас есть «новое» с «свободным», ваши деструкторы не называются. Это обычно приводит к утечке памяти и ресурсов.
Если у вас есть «malloc» с «delete», вы не получаете вызовы конструктора, поэтому ваши объекты неинициализированы. Это может привести ко всем видам ошибок, например, когда деструктор вызывается.
Как указано в комментарии ниже, в не-POD-типах есть вещи (например, классы с виртуальными методами и классы, использующие виртуальное наследование), которые требуют инициализации, даже если не сразу очевидно, что инициализация конструктора необходима. Если вы используете malloc для объекта, а затем вызываете виртуальный метод, наиболее вероятный результат - сбой вашей программы.
Пока что, если все ваши типы - POD (Plain Old Data), вам может повезти, но это очень сильно зависит от вашего компилятора - нет гарантии, что «malloc» и «new» используют одну и ту же кучу, так что вы можете получить повреждение кучи и сбои на некоторых компиляторах.
Короче - не делай этого.