๐ฅ ๋์ ๋ฉ๋ชจ๋ฆฌ ํด์ ์ ๋ฌธ์ ์ ๋ฐ ์์ธ ์ฒ๋ฆฌ
๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ธ ์ฒ๋ฆฌ์ ํจ๊ป ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์์ ํ๊ฒ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๋ฌธ์ ์ํฉ
์๋ ์ฝ๋๋ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ธ ์ฒ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ๋ ์์์ด๋ค. ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ ๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ๊ณ ์๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๊ฐ 0์ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ, ์์ธ๊ฐ ๋ฐ์ํ๊ณ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ๋๋ก ํด์ ๋์ง ์์์ ์๋ค.
#include <iostream>
using namespace std;
void main()
{
int* a;
int b;
cout << "๋๋๋ ์ ์
๋ ฅ";
cin >> b;
try {
a = new int(10);
if (b == 0) throw b;
cout << "๋๋๊ธฐ ๊ฒฐ๊ณผ : " << *a / b << endl;
delete a;
}
catch (int ex) {
cout << "์์ธ ์ํฉ" << endl;
}
}
์ด ์ฝ๋์์ try ๋ธ๋ก์์ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ , ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
๐ ๋ฌธ์ ์ ์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ง ์์ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐ์์ํฌ์ ์๋ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ์ด๋ค.
๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ค๋งํธ ํฌ์ธํฐ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ค. ์์ ์ฝ๋์์๋ unique_ptr๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ ์๋ค.
#include <iostream>
#include <memory>
using namespace std;
void main()
{
int b;
cout << "๋๋๋ ์ ์
๋ ฅ: ";
cin >> b;
try {
unique_ptr<int> a(new int(10));
if (b == 0) throw b;
cout << "๋๋๊ธฐ ๊ฒฐ๊ณผ : " << *a / b << endl;
}
catch (int ex) {
cout << "์์ธ ์ํฉ" << endl;
}
}
์ ์ฝ๋์์ ์ค๋งํธ ํฌ์ธํฐ์ธ std:unique_ptr๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
unique_ptr์ ํด๋น ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๊ถ์ ๊ฐ์ง๊ณ ์๊ณ , ํด๋น ํฌ์ธํฐ๊ฐ ์ค์ฝํ๋ฅผ ๋ฒ์ด๋ ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ํ ์ ์๊ณ , ์์ธ ์ฒ๋ฆฌ์ ๋ํ ๋ฌธ์ ๋ ๋์์ ํด๊ฒฐํ ์ ์๋ค.