진정한 예외: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!