C에서의 동적 할당
동적 할당한 메모리를 반환하려면 free() 함수를 사용하면 된다. malloc을 통해 반환받은 포인터를 free() 함수의 인자로 전달하면 된다.
C++에서의 동적 할당
C++은 C를 포함하는 개념이라고 전에 언급한 적이 있다. 그래서 C++에서는 malloc(), realloc(), free()를 C와 동일하게 사용할 수 있다. 하지만 새롭게 추가된 동적 할당 방법도 존재한다. 그것이 바로 new를 통한 동적 할당이다.
위의 코드는 new를 통한 동적 할당과 delete를 통한 메모리 해제의 예시를 보여준다. 배열의 형태로 동적 할당했으므로 delete할 때 '[]'를 빠트려서는 안 된다.
지금까지의 내용으로 malloc() 함수와 new는 크게 달라보이지 않는다. 하지만 malloc() 함수와 new는 큰 차이가 있다. 다음은 클래스를 malloc() 함수를 통해서 동적 할당한 경우와 new 함수를 통해서 동적 할당한 경우를 동시에 보여준다. 이 예를 통해 malloc() 함수를 통한 동적 할당과 new를 통한 동적 할당의 가장 큰 차이를 확인할 수 있을 것이다.
case1은 new를 통해 동적 할당하였다. 실행 결과 case1에는 생성자(constructor)가 실행된다. 그리고 delete를 통해 메모리를 해제하면 소멸자(destructor)가 실행된다. case2는 malloc() 함수를 통한 동적 할당이다. 실행결과에서도 확인할 수 있지만 new와는 달리 생성자가 호출되지 않는다. free() 함수를 통한 메모리 해제도 소멸자가 호출되지 않는다. 이처럼 malloc(), free()를 통한 동적 할당과 해제, new, delete를 통한 동적 할당과 해제는 생성자와 소멸자를 호출하는지 하지 않는지의 차이가 있다.
댓글 없음:
댓글 쓰기