2011-08-14 6 views
2

스마트 포인터 나 자동 포인터와 함께 set_new_handlers를 사용하는 것에 대해 걱정할 필요가 있습니까? 아니면 라이브러리가 정제 된 오류 처리 기능을 갖춘 핸들러로 포장되어 있습니까? 모든 (현재 단지 auto_ptr, 곧 shared_ptrweak_ptr 포함)smart_pointer와 set_new_handler를 함께 사용하십시오.

감사

답변

3

C와 함께 제공되는 스마트 포인터 ++ 기본적으로 new 사용, 그래서 그들은 자동적으로 전역 새로운 핸들러와 인터페이스 할 수 있습니다. 이러한 클래스를 사용할 때 새 처리기가 호출되도록하려면 특별한 작업을 수행 할 필요가 없습니다.

희망이 도움이됩니다.

+0

확실! 대단히 감사합니다. 잠시 후이를 수락합니다. – Bitmap

+0

alloc 예외가 발생하거나 훨씬 세련된 메시지가 나오면 코어 덤프가됩니까? – Bitmap

+0

나는 결코 메모리를 할당하지 않기 때문에 auto_ptr이 던지지 않을 것이라고 확신한다. shared_ptr의 경우 메모리가 발견되지 않으면 (심지어 새로운 핸들러를 호출 한 후에도) 단지 bad_alloc 예외가 발생한다고 생각합니다. 이렇게하면 C++에서 할당이 실패 할 때의 기본 동작과 마찬가지로 오류를 복구 할 수 있습니다. – templatetypedef

2

나는 당신이 무관 한 것들에 대해 걱정하고 있다고 생각합니다. 새 처리기는 할당 할 메모리를 찾을 수없는 경우에 operator new이 작동하는 방법을 지정하는 세부 정보입니다. 스마트 포인터는 라이브러리 제공 컨테이너 클래스입니다. 대부분의 C++ 표준 라이브러리 컨테이너는 할당 자 클래스를 통해 모듈 방식으로 수행하는 메모리를 할당해야합니다. 기본 할당자는 new을 사용하여 메모리를 얻을 수 있지만 메모리 할당 및 객체 생성 프로세스는 분리되어 있으며 어떤 라이브러리 클래스에도 연산자가 작동하는 방법에 대한 세부 정보가 필요하지 않으며 그 반대의 경우도 마찬가지입니다. .

new 연산자 (예 : 처리기 설치)는 표준 라이브러리 구성에서 투명하게 작동하며 다른쪽에 대해 알아야 할 것이 없습니다.

관련 문제