new
Java, Javascript 및 C #과 같은 언어로 된 키워드는 클래스의 새 인스턴스를 만듭니다.
이 구문은 new
힙에 클래스의 새 인스턴스를 할당하고 새 인스턴스에 대한 포인터를 반환하는 데 특히 사용되는 C ++에서 상속 된 것으로 보입니다 . C ++에서는 이것이 객체를 구성하는 유일한 방법은 아닙니다. new
- 를 사용하지 않고 스택에 객체를 생성 할 수도 있습니다 . 실제로 객체를 생성하는이 방법은 C ++에서 훨씬 더 일반적입니다.
따라서 C ++ 배경에서 비롯된 new
Java, Javascript 및 C #과 같은 언어 의 키워드는 자연스럽고 분명했습니다. 그런 다음 new
키워드 가없는 Python을 배우기 시작했습니다 . 파이썬에서 인스턴스는 다음과 같이 생성자를 호출하여 간단히 구성됩니다.
f = Foo()
처음에는 파이썬이 가질 이유가 없다는 것이 생길 때까지 new
모든 것이 객체이기 때문에 다양한 생성자 구문 사이에서 명확하게 할 필요가 없기 때문에 이것은 나에게 조금 벗어난 것처럼 보였다 .
그러나 나는 생각했다-실제로 new
Java 의 요점은 무엇입니까? 왜 말해야 Object o = new Object();
합니까? 왜 안돼 Object o = Object();
? C ++에는 new
힙에 할당과 스택에 할당을 구별해야하기 때문에 분명히 필요합니다 .하지만 Java에서는 모든 객체가 힙에 구성되므로 new
키워드 가있는 이유는 무엇입니까? Javascript에 대해서도 같은 질문을 할 수 있습니다. 익숙하지 않은 C #에서는 new
객체 유형과 값 유형을 구별하는 데 약간의 목적이있을 수 있지만 확실하지 않습니다.
어쨌든, C ++ 이후에 나온 많은 언어들은 new
실제로 키워드 를 "상속 적으로"상속 하지 않은 것 같습니다. 그것은 흔적 키워드 와 거의 같습니다 . 우리는 어떤 이유로 든 필요한 것 같지 않지만 아직 거기에 있습니다.
질문 : 이것에 대해 맞습니까? 아니면 new
Java가 아닌 Java, Javascript 및 C #과 같은 C ++에서 영감을 얻은 메모리 관리 언어로 작성해야하는 강력한 이유가 있습니까?
f
, 함수를 이스케이프하지 않으면 스택 공간을 할당하십시오.
f
클로징 함수가 리턴 될 때 GC가 오브젝트를 수집 할 수 있음을 증명하는 것 입니다.
new
키워드 가있는 이유 입니다. 물론 새로운 변수, 멍청한 컴파일러를 만들고 싶습니다! 좋은 언어는 내 의견으로는 같은 구문을 것이다f = heap Foo()
,f = auto Foo()
.