> 백엔드 개발 > C++ > C에서는 `new`가 항상 `std::bad_alloc`을 던지나요?

C에서는 `new`가 항상 `std::bad_alloc`을 던지나요?

Barbara Streisand
풀어 주다: 2024-11-17 08:50:03
원래의
626명이 탐색했습니다.

Does `new` Always Throw `std::bad_alloc` in C  ?

진정한 예외: C 메모리 관리의 표준을 넘어서

C 표준과 달리 다음과 같은 일부 컴파일러에서는 VC6, new가 할당에 실패할 때 std::bad_alloc 예외를 반환하는 예상 동작에서 벗어남

일반적으로 new가 요청된 메모리를 획득하지 못하면 확립된 C 표준을 준수하여 std::bad_alloc 예외를 트리거합니다. 하지만 VC6의 경우에는 대체 접근 방식을 택했습니다.

VC6는 메모리 할당 실패 시 예외를 반환하는 대신 0(또는 NULL)을 반환한 것으로 알려졌습니다. 표준과 다른 이러한 동작은 코드에서 혼란과 예상치 못한 결과를 초래할 수 있습니다.

이 문제를 해결하기 위해 Microsoft는 권장 솔루션으로 사용자 지정 새 핸들러를 도입했습니다. 그러나 Visual C 7.0 및 7.1(VS2002 및 VS2003)에서는 복잡한 규칙 세트에 따라 new가 던지지 않거나 던지는 방식으로 동작할지 여부가 결정되었습니다.

Visual C 8.0(VS2005)이 출시되면서, Microsoft는 일관된 정책을 시행하여 문제를 해결했습니다. 이 버전에서는 nothrownew.obj 개체 파일과 명시적으로 연결되지 않는 한 new는 항상 기본적으로 예외를 발생시킵니다.

VC6용으로 설계된 이전 코드로 작업하는 개발자의 경우 std::nothrow 매개변수를 활용하여 다음을 수행할 수 있습니다. 해당 컴파일러에서 new의 동작을 모방합니다. new(std::nothrow)를 지정하면 코드가 여러 컴파일러에서 유사하게 작동하도록 기계적으로 변경될 수 있으므로 기존 오류 처리 메커니즘을 점검할 필요가 없습니다.

위 내용은 C에서는 `new`가 항상 `std::bad_alloc`을 던지나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿