반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- javascript
- 코테연습
- CS
- 리액트
- 파이썬
- VUE
- 리트코드
- 프로그래머스
- C++
- LeetCode
- react
- Level2
- 자바스크립트
- 백준
- dp
- sql
- 배열
- Doitvue.js입문
- Medium
- web
- 프로그래밍
- 웹프로그래밍
- typescript
- OS
- python
- Level1
- 동적계획법
- Level3
- 고득점Kit
- 카카오
Archives
- Today
- Total
[c++] 예외처리 본문
반응형
구조적 예외 처리
// 원소의 값을 바꾼다 void DynamicArray::SetAt(int index, int value) { // 인덱스의 범위가 맞지 않으면 예외를 던진다 if (index < 0 || index >= GetSize()) throw "Out of Range!!!"; arr[index] = value; } // 크기가 10인 배열 객체를 만든다. DynamicArray arr(10); try { arr.SetAt(5, 100); arr.SetAt(8, 100); arr.SetAt(10, 100); } catch(const char* ex) { cout << "예외 종류 : " << ex << "\n"; }
- 예외를 객체를 던져주는 경우 (레퍼런스로 던져 주는 것이 좋음)
try
{
MyException e( this, “객체”, 0 );
throw e;
}
catch( MyException& ex)
{
cout << ex.description << “\n”;
}
- 동적메모리 할당하는 경우
- 생성자에서 오류 발생하면 객체 생성되지 않은 것으로 간주하고 소멸자 실행되지 않음, 내부에서 리소스 처리 해줘야함
- 이외에는 소멸자에서 리소스 처리 가능
- 스마터 포인터 사용하는 경우 따로 메모리를 해제해줄 필요가 없다.
#include <memory>
using namespace std;
int main()
{
// 스마트 포인터 생성
auto_ptr<int> p( new int );
// 스마트 포인터의 사용
*p = 100;
// 메모리를 따로 해제해 줄 필요가 없다
return 0;
}
auto_ptr 대체 unique_atr (c++11)
객체에 유일한 소유권 부여, 생성자는 하나인데 소멸자가 여러개 실행되는 경우를 막아줌#include <iostream> #include <memory> using namespace std; class Test { int* data; public: Test() { cout << "생성자!" << endl; data = new int[100]; } ~Test() { cout << "소멸자!" << endl; delete[] data; } void t() { cout << "테스트 중..." << endl; } }; void testing(){ //Test* t1 = new Test(); //Test* t2 = t1; unique_ptr<Test> up1(new Test()); // C++11 (기존의 auto_ptr을 보완 대체) // Test* up1 = new Test(); //unique_ptr<Test> up2 = up1; //up1->t(); } void main() { testing(); }
- 예외 랠리
#include <iostream>
using namespace std;
void C() {
//throw 123;
//throw "Hell";
throw 2.71f;
}
void B() {
C();
}
void A() {
try {
B();
}
catch (int ex) {
cout << "예외(A함수/정수처리) = " << ex << "\n";
throw; // 예외 다시 던지기
}
}
int main() {
try {
A();
}catch (int ex) {
cout << "예외(Main함수/정수처리) = " << ex << "\n";
}catch (const char* ex) {
cout << "예외(Main함수/문자열처리) = " << ex << "\n";
}catch (...) { //catch 맨 마지막에 와야함
cout << "기타 예외\n";
}
return 0;
}
반응형
'객체지향프로그래밍 (C++)' 카테고리의 다른 글
[c++] 변수의 존속 기간 , 스코프 (duration , scope) (0) | 2020.07.13 |
---|---|
[c++] string 인자로 받을때 (0) | 2020.07.10 |
[c++] Virtual Functions (가상 함수) (0) | 2020.07.10 |
[c++] multiple inheritance (다중 상속) (0) | 2020.07.10 |
[c++] inhertitance (상속) (0) | 2020.07.10 |
Comments