Вкратце, потому что это в целом усложняет задачи программирования.Ручное управление памятью требует значительных навыков и усилий для получения правильных результатов - усилий, которые вы не можете использовать для решения конкретной задачи.
Сценарий, который вы показываете выше, является распространенным, но далеко не единственным.Что если вы вернете ссылку на один из объектов?Что если вы передадите ссылку на вызываемый метод (где он может храниться)?И т. Д. И т. Д. Это все вопросы, о которых нужно подумать, прежде чем вы сможете ответственно уничтожить свои объекты.В целом они известны как «владение».
Другая сторона медали в том, действительно ли она будет иметь положительный эффект, если будет иметь возможность уничтожать объекты в указанной точке во время выполнения?Это делает возможными деструкторы и RAII в C ++, что является очень мощной идиомой.У Java его нет, и когда я начинал использовать Java, я часто скучал по нему.Однако в Java также есть способы эффективного решения этих проблем (например, блок finally
).Как бы ни был элегантен RAII, он по-прежнему не оплачивает весь беспорядок, который может вызвать ручное управление памятью.
Тогда вы можете предположить: «Почему у нас не может быть и того и другого: явное уничтожение объектов, когда я хочуа сборка мусора для отдыха? ».И вы можете начать бегать за прикрытием до того, как авторы компилятора и разработчики JVM получат вас :-) Это сильно усложнит ситуацию, никто не сделает это без действительно огромного, ощутимого преимущества.И ручное управление памятью не предлагает такой вещи.