동적 메모리 할당과 관련하여 질문이 있습니다.프로그래밍 언어를 통한 동적 메모리 할당
은 C 오면, 메모리 기능을 의 malloc을 이용하여 분배(), 은 calloc() 및 realloc을() 및 무료()를 이용하여 할당이 끊긴 부하. C++ 같은 반대 지향 언어에서 그러나
, C# 및 자바는, 메모리는 동적으로 새로운를 사용하여 할당되고 이 C++의 경우 키워드 (사업자)을 삭제하여 할당 해제.
내 질문은 왜 동적 메모리 할당을 위해 이러한 객관적인 지향 언어에 대한 함수 대신 연산자가 있습니까? new를 사용할 때조차도 함수처럼 할당 도중 클래스 객체 참조에 포인터가 반환됩니다.
구문을 단순화하기 위해서입니까? 아니면 더 깊은 이유가 있습니까?
다른 언어, 다른 사업자, 다른 의미 (여기서 중요한 것은, '그 언어 new'가하는 단지 할당보다 더 많은 메모리를)하게된다. –
[Java가 왜 '새로운'을 필요로하는 것일까?] (http://stackoverflow.com/questions/6340535/is-the-new-keyword-in-java-redundant). 일반적인 non-authorative 대답은 "because C++"입니다 (C++의'new'는 꽤 자주 코드 냄새가 나기 때문에 재미 있습니다.). 어떤 시점에서 Java 디자이너는 좋은 생각이라고 생각했습니다. 아직 확신 할 수 없습니다. C#의 디자이너는 아마도 "Java"를 사용했을 것입니다. – juanchopanza
나는 이론적 근거가 있다고 생각하지 않는다. Stroupstrup은 그것이 C에서 어떻게 이루어 졌는지를 보았고 "이봐, 이거 꽤 어리 석다"고 생각했다. 그리고 나서 그는 다음과 같이 생각했습니다. "나는 멍청한 것을 생각해 낼 수 있다고 확신합니다!". 그리고 거기에 최대 버그 잠재력을위한 프로그래밍 언어 디자인이 있습니다. 실제로 new, new, delete 및 delete와 같은 4 개의 연산자가 있습니다. 너와 같이 섞어 라. 또한 애플리케이션 프로그래머가 과부하가 걸릴 수 있습니다. Java 및 C#의 경우 단순히 C++에서 연산자 이름을 복사/붙여 넣기합니다.그리고 그들은 가비지 컬렉션을 가지고 있기 때문에 삭제에 신경 쓰지 않습니다. – Lundin