Я думаю, что нужно прояснить, что вызовы конструктора и деструктора в первом случае выполняются для неназванного производного объекта, это НЕ конструктор или деструктор Var.Var - это просто ссылочный тип, который не требует специальной обработки.Поскольку компилятор знает тип этого безымянного производного объекта, он корректно статически связывает их с производным классом.
Аналогично, конструктор статически связан во втором случае, потому что тип, следующий за новым, является производным.Однако, когда вы вызываете delete для указателя типа base, компилятор вызывает деструктор Base (снова со статическим связыванием).
Если вы объявили деструктор base виртуальным, тогда это окончательное связывание - то, какой деструктор вызывать при удалениипроизойдет, будет динамическим, и вы получите тот же результат, что и в первом случае.