Widget& Widget::operator= (const Widget& rhs) {
Bitmap* pOrig = pb; // pb는 this의 포인터 변수
pb = new Bitmap(*rhs.pb);
delete pOrig;
return *this;
}
위 코드가 1) self assignment 와 2) new 연산의 예외에 안전하다.
라고 적혀있습니다.
1은 이해가 되는데 2는 잘 안됩니다.
try {
코드
} catch( std::bad_alloc e ) {
처리
}
이래야 new 연산의 예외에 안전한 거 아닌가요?
pb = new Bitmap(*rhs.pb) 가 bad_alloc throw하고
그 밑에서 delete pOrig; 하면 pb랑 pOrig랑 같은 주소 공유하니까
pb가 가지고 있던 주소가 날아가지 않나요?