SlideShare a Scribd company logo
Effective C++
item49. new 처리자의 동작 원리를 제대로 이해하자
이데아게임즈 손진화
new 가 실패했을 때
- 현재 : 예외를 던짐
- 구 C++ : 널 포인터 반환
new 처리자 (new-handler)
메모리 할당이 제대로 되지 못한 상황에 대한 반응으로
operator new 가 예외를 던지기 전에 사용자 쪽에서
지정 할 수 있는 에러 처리 함수를 우선적으로 호출 할 수 있다
이 에러 처리 함수를 new 처리자 라고 한다
new 처리자 (new-handler) 예제
new 처리자 내에서 new 예외가 발생할 경우
new 처리자를 구현할 때 지켜야 할 점
operator new는 충분한 메모리를 찾아낼 때까지 new 처리자를
되풀이 해서 호출한다 그래서 new 처리자를 구현할 때 아래 5가지
중 하나를 반드시 포함해서 구현하도록 해야한다
- 사용할 수 있는 메모리를 더 많이 확보한다
- 다른 new 처리자를 설치한다
- new 처리자의 설치를 제거한다
- 예외를 던진다
- 복귀하지 않는다
사용할 수 있는 메모리를 더 많이 확보한다
프로그램이
시작할 때
new 처리자가
사용할 메모리를
미리 할당해 놓는다
다른 new 처리자를 설치한다
자기가 실패할 경우
처리해 줄 처리자를
설정해 놓는다
new 처리자의 설치를 제거
설정된 new 처리자가 없으면 예외를 던진다
예외를 던진다
bad_alloc 혹은
bad_alloc 에서 파생된
예외를 던지도록 한다
operator new 에는 이쪽
종류의 에러를 받아서
처리하는 부분이 없기
때문에 원래의 위치로
전파된다
복귀하지 않는다
abort 혹은 exit를 호출
특정 클래스에 적용되는 new 처리자 구현
처리자를 정적 멤버로 관리
Widget의 new 처리자로 설정
특정 클래스에 적용되는 new 처리자 구현
이전 new 처리자를 저장해뒀다가 객체가 소멸하면 되돌리는 클래스
Widget 클래스를 처리할 때는 Widget의 처리자로 적용했다가
작업이 끝나면 원래의 처리자로 되돌려야 한다
특정 클래스에 적용되는 new 처리자 구현
클래스 별 new 처리자 구현
클래스 별 new 처리자 구현
믹스인(mixin) 기본 클래스
다른 파생 클래스들이 한 가지 특정 기능만을 물려받을 수 있도록
설계한 기본 클래스
신기하게 반복되는 템플릿 패턴 (CRTP)
curiously recurring template pattern
자신을 템플릿 인자로 사용하여 템플릿 인스턴스화로부터
파생되게 하는 c++ 관용어
정적 다형성으로 구현하고 싶을 때 주로 사용
예외 불가 (nothrow) new
할당 실패시 예외를 던지지 않고 옛날 방식처럼 널을 반환하는
operator new 를 예외 불가 형태 라고 말한다
이전 코드와 호환성을 위해 추가
예외 불가 (nothrow) new
예외 불가 (nothrow) new
예외불가 new는 그때 호출되는 operator new 에서만 예외가
발생되지 않도록 보장할 뿐, 생성자 등에서 예외가 나오지 않게
막아준다는 얘기가 아니다
이것만은 잊지 말자
- set_new_handler 함수를 쓰면 메모리 할당 요청이 만족되지
못했을 때 호출되는 함수를 지정할 수 있습니다
- 예외불가(nothrow) new는 영향력이 제한되어 있습니다 메모리
할당 자체에만 적용되기 때문입니다 이후에 호출되는
생성자에서는 얼마든지 예외를 던질 수 있습니다

More Related Content

PDF
The Sieve of Eratosthenes - Part 1
PPTX
Object Oriented Programming Concepts for beginners
PPTX
Unit testing & TDD concepts with best practice guidelines.
PDF
Learn Java with Dr. Rifat Shahriyar
PPT
Android - Thread, Handler and AsyncTask
PPTX
Vb6 vs vb.net....(visual basic) presentation
PDF
Clean code - smells and heuristics
PDF
The Expression Problem - Part 1
The Sieve of Eratosthenes - Part 1
Object Oriented Programming Concepts for beginners
Unit testing & TDD concepts with best practice guidelines.
Learn Java with Dr. Rifat Shahriyar
Android - Thread, Handler and AsyncTask
Vb6 vs vb.net....(visual basic) presentation
Clean code - smells and heuristics
The Expression Problem - Part 1

Similar to Effective c++ item49 (20)

PPTX
Effective c++ 정리 chapter 8
PPTX
Effective c++ chapter 7,8
PPTX
Effective c++chapter8
PPTX
Mec++ chapter3,4
PDF
Effective c++ chapter7_8_9_dcshin
PPTX
Effective c++ 4
PDF
Effective c++ chapter 1,2 요약
PPTX
More effective c++ 챕터3~4ppt
PPTX
More effective c++ 2
PDF
PDF
Tcpl 14장 예외처리
PDF
7 8 1
PPTX
More effective c++ 1
PPTX
Effective c++ 1~8장
PPTX
이펙티브 C++ 789 공부
PDF
More effective c++ chapter3 4
PPTX
Chapter7~9 ppt
PPTX
Effective c++ 1
PDF
M3 4 1
PDF
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
Effective c++ 정리 chapter 8
Effective c++ chapter 7,8
Effective c++chapter8
Mec++ chapter3,4
Effective c++ chapter7_8_9_dcshin
Effective c++ 4
Effective c++ chapter 1,2 요약
More effective c++ 챕터3~4ppt
More effective c++ 2
Tcpl 14장 예외처리
7 8 1
More effective c++ 1
Effective c++ 1~8장
이펙티브 C++ 789 공부
More effective c++ chapter3 4
Chapter7~9 ppt
Effective c++ 1
M3 4 1
[C++ korea] effective modern c++ study item 14 declare functions noexcept if ...
Ad

More from 진화 손 (20)

PPTX
[C++ 20] [P1035R7] Input range adaptors.
PPTX
[C++ 20] [P0645R10] Text formatting 내용 정리
PPTX
C++20 constexpr default constructor of std::atomic and std::atomic_flag
PDF
[C++ 20][P0325R4] std::to_array() 내용 정리.
PDF
C++ 20 Efficient access to std::basic_stringbuf’s buffer
PDF
C++20 Remove std::weak_equality and std::strong_equality.pdf
PDF
C++20 std::execution::unseq.pdf
PDF
C++ 20 class template argument deduction for alias templates
PDF
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
PDF
C++ 20 Unevaluated asm-declaration in constexpr functions
PDF
C++20 Utility functions to implement uses-allocator construction
PDF
C++ 20 std__reference_wrapper for incomplete types
PDF
C++ 20 Stronger Unicode requirements
PDF
C++20 Concepts library
PDF
C++20 Coroutine
PDF
C++ 20 Relaxing the range-for loop customization point finding rules
PDF
C++ 20 Relaxing the structured bindings customization point finding rules
PDF
C++20 explicit(bool)
PDF
C++20 std::map::contains
PDF
C++20 Comparing unordered containers
[C++ 20] [P1035R7] Input range adaptors.
[C++ 20] [P0645R10] Text formatting 내용 정리
C++20 constexpr default constructor of std::atomic and std::atomic_flag
[C++ 20][P0325R4] std::to_array() 내용 정리.
C++ 20 Efficient access to std::basic_stringbuf’s buffer
C++20 Remove std::weak_equality and std::strong_equality.pdf
C++20 std::execution::unseq.pdf
C++ 20 class template argument deduction for alias templates
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Unevaluated asm-declaration in constexpr functions
C++20 Utility functions to implement uses-allocator construction
C++ 20 std__reference_wrapper for incomplete types
C++ 20 Stronger Unicode requirements
C++20 Concepts library
C++20 Coroutine
C++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rules
C++20 explicit(bool)
C++20 std::map::contains
C++20 Comparing unordered containers
Ad

Effective c++ item49

  • 1. Effective C++ item49. new 처리자의 동작 원리를 제대로 이해하자 이데아게임즈 손진화
  • 2. new 가 실패했을 때 - 현재 : 예외를 던짐 - 구 C++ : 널 포인터 반환
  • 3. new 처리자 (new-handler) 메모리 할당이 제대로 되지 못한 상황에 대한 반응으로 operator new 가 예외를 던지기 전에 사용자 쪽에서 지정 할 수 있는 에러 처리 함수를 우선적으로 호출 할 수 있다 이 에러 처리 함수를 new 처리자 라고 한다
  • 5. new 처리자 내에서 new 예외가 발생할 경우
  • 6. new 처리자를 구현할 때 지켜야 할 점 operator new는 충분한 메모리를 찾아낼 때까지 new 처리자를 되풀이 해서 호출한다 그래서 new 처리자를 구현할 때 아래 5가지 중 하나를 반드시 포함해서 구현하도록 해야한다 - 사용할 수 있는 메모리를 더 많이 확보한다 - 다른 new 처리자를 설치한다 - new 처리자의 설치를 제거한다 - 예외를 던진다 - 복귀하지 않는다
  • 7. 사용할 수 있는 메모리를 더 많이 확보한다 프로그램이 시작할 때 new 처리자가 사용할 메모리를 미리 할당해 놓는다
  • 8. 다른 new 처리자를 설치한다 자기가 실패할 경우 처리해 줄 처리자를 설정해 놓는다
  • 9. new 처리자의 설치를 제거 설정된 new 처리자가 없으면 예외를 던진다
  • 10. 예외를 던진다 bad_alloc 혹은 bad_alloc 에서 파생된 예외를 던지도록 한다 operator new 에는 이쪽 종류의 에러를 받아서 처리하는 부분이 없기 때문에 원래의 위치로 전파된다
  • 12. 특정 클래스에 적용되는 new 처리자 구현 처리자를 정적 멤버로 관리 Widget의 new 처리자로 설정
  • 13. 특정 클래스에 적용되는 new 처리자 구현 이전 new 처리자를 저장해뒀다가 객체가 소멸하면 되돌리는 클래스 Widget 클래스를 처리할 때는 Widget의 처리자로 적용했다가 작업이 끝나면 원래의 처리자로 되돌려야 한다
  • 14. 특정 클래스에 적용되는 new 처리자 구현
  • 15. 클래스 별 new 처리자 구현
  • 16. 클래스 별 new 처리자 구현 믹스인(mixin) 기본 클래스 다른 파생 클래스들이 한 가지 특정 기능만을 물려받을 수 있도록 설계한 기본 클래스 신기하게 반복되는 템플릿 패턴 (CRTP) curiously recurring template pattern 자신을 템플릿 인자로 사용하여 템플릿 인스턴스화로부터 파생되게 하는 c++ 관용어 정적 다형성으로 구현하고 싶을 때 주로 사용
  • 17. 예외 불가 (nothrow) new 할당 실패시 예외를 던지지 않고 옛날 방식처럼 널을 반환하는 operator new 를 예외 불가 형태 라고 말한다 이전 코드와 호환성을 위해 추가
  • 19. 예외 불가 (nothrow) new 예외불가 new는 그때 호출되는 operator new 에서만 예외가 발생되지 않도록 보장할 뿐, 생성자 등에서 예외가 나오지 않게 막아준다는 얘기가 아니다
  • 20. 이것만은 잊지 말자 - set_new_handler 함수를 쓰면 메모리 할당 요청이 만족되지 못했을 때 호출되는 함수를 지정할 수 있습니다 - 예외불가(nothrow) new는 영향력이 제한되어 있습니다 메모리 할당 자체에만 적용되기 때문입니다 이후에 호출되는 생성자에서는 얼마든지 예외를 던질 수 있습니다