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()
.