C์–ธ์–ด

[C++] ํšจ์œจ์ ์ธ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ - ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ ํ™œ์šฉ ์˜ˆ์‹œ

hyonie 2024. 4. 10. 16:20

๐Ÿ’ฅ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ์˜ ๋ฌธ์ œ์  ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ํ•จ๊ป˜ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํ•ด์ œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

 

๋ฌธ์ œ ์ƒํ™ฉ

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ์ด๋‹ค. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ 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์€ ํ•ด๋‹น ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ํ•ด๋‹น ํฌ์ธํ„ฐ๊ฐ€ ์Šค์ฝ”ํ”„๋ฅผ ๋ฒ—์–ด๋‚ ๋•Œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ํ• ์ˆ˜ ์žˆ๊ณ , ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋„ ๋™์‹œ์— ํ•ด๊ฒฐํ• ์ˆ˜ ์žˆ๋‹ค.