ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Effective C++...50
    일지 2022. 8. 29. 11:42

    위치 지정 new를 작성한다면 위치 지정 delete도 같이 준비하자

    위치 지정 new 란?

    위치 지정 new는 기본적인 operator new에 새로운 매개변수를 전달해주는 형태의 new를 말한다.


    class Widget {

    public:

       ...

        static void* operator new(std::size_t size, std::ostream& logStream) throw(std::bad_alloc);

    };


     

    위치 지정 new와 delete가 짝이 되지 않으면 생기는 문제

    C++의 런타임 시스템은 new에서 에러가 발생했을 때 자동적으로 operator delete를 호출해준다.

    그런데 여기에는 한 가지 조건이 붙는데 operator new와 매개변수의 개수와 타입이 동일한 버전의 operator delete를 호출한다는 것이다.

     

    ※ 위치 지정 new를 사용했다면 위치 지정 delete를 함께 사용해야 한다.

     

    그런데 위치 지정 delete에서 에러가 발생했다면 기본 형태의 delete를 호출하게 되는데 표준 형태의 operator delete가 존재하지 않으면 정상적으로 처리가 되지 않을 것이다.

     

    ※ 위치 지정 new와 연관이 있다면 표준 형태의 operator delete도 마련해야 한다.

     

    댓글

Designed by Tistory.