В тот же самый вектор когда кладёшь он же не спрашивает тебя куда класть в стек или кучу, он сам «решает» куда класть (с помощью запросов к системе конечно). Почему нельзя тогда было сделать так, что объявив переменную, допустим int a1; эта переменная автоматом создавалась там, где есть свободная память, если в стеке мало , чтоб создавалась в куче , и чтоб на надо было писать new int принудительно