С++ 11 позволяет его реализациям выполнять (некоторые) утилиты сбора мусора. Почему стандарт допускает это? Мне всегда казалось, что на С++ вы не платите за то, что не используете. Для меня (неявный) GC чувствует, что это подрывает эту идеологию. Кроме того, нетрудно написать и использовать явную утилиту сбора мусора в С++ с помощью смарт-указателей.
Во-вторых, GC сделает некоторые другие действительные программы недействительными. Примеры включают маскирование указателя и связанные с ним низкоуровневые "хаки" указателя.
int * nums = new int[10];
nums += 2;
*nums = 777; // nothing points to the new'ed int[10] at this point
// oh no! nums could have gotten collected!!! (so lets assume it was)
*nums = 666; // crash (or memory corruption (or something else that bad))