new
Ключевые слова в языках , как Java, JavaScript и C # создают новый экземпляр класса.
Этот синтаксис, по-видимому, унаследован от C ++, где new
он используется специально для выделения нового экземпляра класса в куче и возврата указателя на новый экземпляр. В C ++ это не единственный способ создания объекта. Вы также можете создать объект в стеке, не используя new
- и на самом деле этот способ создания объектов гораздо более распространен в C ++.
Итак, исходя из фона C ++, new
ключевое слово в таких языках, как Java, Javascript и C #, показалось мне естественным и очевидным. Затем я начал изучать Python, у которого нет new
ключевого слова. В Python экземпляр создается просто путем вызова конструктора, например:
f = Foo()
Поначалу мне это показалось немного странным, пока мне не пришло в голову, что у Python нет никаких оснований для этого new
, потому что все является объектом, поэтому нет необходимости устранять неоднозначность между различными синтаксисами конструктора.
Но потом я подумал - какой смысл new
в Java? Почему мы должны говорить Object o = new Object();
? Почему не просто Object o = Object();
? В C ++ это определенно необходимо new
, так как мы должны различать распределение в куче и распределение в стеке, но в Java все объекты создаются в куче, так почему же даже есть new
ключевое слово? Тот же вопрос можно задать для Javascript. В C #, с которым я гораздо менее знаком, я думаю, что new
может иметь какую-то цель с точки зрения разграничения между типами объектов и типами значений, но я не уверен.
Несмотря на это, мне кажется, что многие языки, появившиеся после C ++, просто «унаследовали» new
ключевое слово - без особой необходимости. Это почти как рудиментарное ключевое слово . Кажется, нам это не нужно по какой-либо причине, и все же оно есть.
Вопрос: я прав по этому поводу? Или есть какая-то веская причина, которая new
должна быть в C ++ - вдохновленные языки с управлением памятью, такие как Java, Javascript и C #, но не Python?
f
не выходит из функции, выделяйте место в стеке.
f
при возврате вмещающей функции.
new
ключевое слово. Конечно, я хочу создать новую переменную, тупой компилятор! Хороший язык будет по - моему есть синтаксис , какf = heap Foo()
,f = auto Foo()
.