C++

[C++ 기술면접] C++ new 연산자와 C언어 malloc 함수의 차이점은?

코딩샐러드 2024. 2. 5. 19:42

C++ new 연산자와 C malloc 함수의 차이점은?

new와 malloc은 모두 동적 메모리 할당을 위해 사용되는 C++의 연산자와 C의 함수입니다. 그러나 둘 사이에는 몇 가지 중요한 차이점이 있습니다. 이를 아래에 설명해드리겠습니다.

1. 사용 방식의 차이점

  • new: new 연산자는 C++에서 객체를 동적으로 할당하기 위해 사용됩니다. 즉, 클래스의 인스턴스를 생성하는 데 사용됩니다. new를 사용할 때는 자료형을 명시하고 할당할 객체 수에 따라 적절한 메모리를 동적으로 할당합니다.
  • malloc: malloc 함수는 C에서 일반적인 메모리 블록을 동적으로 할당하기 위해 사용됩니다. malloc을 사용할 때는 할당할 메모리의 크기만 지정하고, 반환된 메모리 블록을 캐스팅하여 사용해야 합니다.

2. 자료형 처리 차이점

  • new: new 연산자는 자료형에 따라 동적으로 할당할 메모리의 크기를 자동으로 계산합니다. 또한, 할당된 메모리를 자동으로 초기화하여 객체 생성자를 호출합니다.
  • malloc: malloc 함수는 메모리 블록의 크기만을 고려하며, 자료형에 대한 정보를 알지 못합니다. 따라서 반환된 메모리 블록은 적절한 자료형으로 캐스팅하여 사용해야 합니다. 초기화를 위해서는 개발자가 수동으로 초기화 코드를 작성해야 합니다.

3. 예외 처리 방식

  • new: new 연산자는 메모리 할당에 실패하면 std::bad_alloc 예외를 throw합니다. 따라서 예외 처리 메커니즘이 내장되어 있어 예외를 처리할 수 있습니다.
  • malloc: malloc 함수는 메모리 할당에 실패하면 NULL 포인터를 반환합니다. 예외를 throw하지 않기 때문에 개발자가 수동으로 반환된 포인터가 NULL인지 확인하여 예외 처리를 해야 합니다.

4. 연산자 오버로딩의 차이점

  • new: new 연산자는 클래스의 멤버 함수로 오버로딩할 수 있습니다. 따라서 동적 메모리 할당 시 특정한 동작을 수행하도록 커스터마이징할 수 있습니다.
  • malloc: malloc 함수에는 연산자 오버로딩이 지원되지 않습니다.

5. 해제 방법 - 유사한점

  • new: new로 할당된 메모리는 delete 연산자를 사용하여 해제해야 합니다.
  • malloc: malloc으로 할당된 메모리는 free 함수를 사용하여 해제해야 합니다.

이러한 차이점을 고려하여, C++에서는 객체를 동적으로 할당할 때 new 연산자를 사용하는 것이 권장됩니다. new는 자료형의 크기를 자동으로 처리하고 예외 처리 기능을 제공하기 때문에 안전하고 편리합니다. 그러나 C 코드와의 호환성이 필요한 경우에는 malloc 함수를 사용할 수도 있습니다.