C++/Exception
2021. 3. 22. 00:13
예외 처리의 위험성과 단점
메모리 누수
throw
이후의 코드는 무시되기 때문에, 메모리 누수가 발생할 가능성이 존재한다.#include <iostream> using namespace std; int main() { try { int* i = new int[100000]; throw "error"; delete[] i; } catch (...) { cout << "Catch\n"; } } /* stdout stderr Catch */
- unique_ptr를 사용하여 해결할 수 있다.
소멸자에서 throw 사용 금지
소멸자에서는
throw
의 사용이 금지되어있다.- 만약 사용하면 런타임 에러가 발생한다.
#include <iostream> #include <memory> using namespace std; class A { public: ~A() { throw "error"; } }; int main() { try { A a; } catch (...) { cout << "Catch\n"; } }
warning C4297: 'A::~A': function assumed not to throw an exception but does message : destructor or deallocator has a (possibly implicit) non-throwing exception specification
'C++ > Exception' 카테고리의 다른 글
C++ 함수 try (Function try) (0) | 2021.03.22 |
---|---|
C++ 예외 클래스와 상속 (Exception Class and Inheritance) (0) | 2021.03.22 |
C++ 스택 되감기 (Stack Unwinding) (0) | 2021.03.22 |
C++ 예외 처리의 기본 (0) | 2021.03.22 |
C++ 예외 처리 (Exception Handling) (0) | 2021.03.22 |