-
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도 마련해야 한다.