본문 바로가기

스터디/C++55

[ C++ ] C++ 형 변환 연산자 총 정리( static_cast, const_cast, dynamic_cast, reinterpret_cast ) C 스타일의 형 변환 연산자는 무적의 형 변환 연산자(Old C-style cast operator)이기에.. C 언어와의 호환성을 위해서 존재하지만, C++에서의 새로운 형 변환 연산자를 사용하는 것이 안전하다. C++에서 발생할 수 있는 C의 형 변환의 문제점은 기초 클래스의 포인터 형을 유도 클래스의 포인터 형으로 변환하는 것이 있기에, 일반적인 연산이 아니다. 그래서 C++은 다음과 같이 총 4개의 연산자를 추가로 제공하면서 용도에 맞는 형 변환 연산자의 사용을 권하고 있다. dynamic_cast dynamic_cast(expr) 사이에 변환하고자 하는 자료형의 이름을 둔다. 하지만 객체의 포인터 또는 참조형이 와야 한다. ( ) 사이에는 변환의 대상이 와야 한다. dynamic_cast는 다음.. 2019. 12. 7.
[ C++ ] new 연산자 예외처리 new 연산에 의한 메모리 할당이 실패하면 bad_alloc이라는 예외가 발생한다. ( bad_alooc : 헤더 파일 에 선언된 예외 클래스로써 메모리 할당의 실패를 알리는 의도로 정의됨. ) 여기서 what함수는 예외의 원인 정보를 문자열로 반환하는데, 내용은 컴파일러에 따라서 달라진다. 2019. 12. 5.
[ C++ ] 예외 클래스와 예외 객체 기본 자료형 데이터만을 '예외' 데이터로 사용했는데, 클래스의 객체도 '예외' 데이터가 될 수 있다. 또 이것이 보다 일반적인 방법이다. 예제를 보자. 예외 발생 시에 DivideException 객체를 생성하여 예외를 처리한다. 예외 발생을 알리는 데 사용되는 객체를 가리켜서 '예외 객체'라고 하며, 예외객체의 생성을 위해 정의된 클래스는 '예외 클래스'라고 한다. 객체를 이용해서 예외상황을 알리면, 예외가 발생한 원인에 대한 정보를 보다 자세히 담을 수 있다. 2019. 12. 2.
[ C++ ] Stack Unwinding(스택 풀기) 이전 포스팅에서 함수 내에서 throw를 던진 경우에 그 함수를 호출한 영역으로 돌아가서 예외처리를 하였다. 이렇듯, 예외처리에 대한 책임은 throw가 발생한 함수를 호출한 영역으로 넘어가게 된다. 그리고 호출한 영역으로 '예외' 데이터를 전달하면, 해당 함수는 더 이상 실행되지 않고 종료가 된다. 이렇게 함수 내에서 예외가 처리되지 않아서, 함수를 호출한 영역으로 예외 데이터가 전달되는 현상을 가리켜 'Stack Unwinding(스택 풀기)'라고 한다. 위의 함수 호출 순서는 다음과 같다. main -> One -> Two -> Three ( 스택이 쌓이는 방향 ) 그리고 Three에서 예외를 던졌다. 그래서 다시 Three -> Two -> One -> main ( '예외' 데이터가 전달되면서 스.. 2019. 12. 2.