๊ณต๋ถ€/์ฝ”๋”ฉ

[C++] new์™€ malloc์€ ํ—ˆ๋‹ˆ๋ธŒ๋ ˆ๋“œ๊ฐ€ ๋จน๊ณ  ์‹ถ์—ˆ๋˜ ์—ฌ์ž์นœ๊ตฌ์™€ ๊ฐ™๋‹ค

sourceoftax 2025. 8. 3. 17:27

์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๋„๋ก ํ•˜์ž. 

#include <iostream>
using namespace std;

class SimpleClass {
private:
	string name;

public:
	SimpleClass(string n) : name(n) { //์ƒ์„ฑ์ž
		cout << name << " ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค." << endl;
	}
	
	~SimpleClass() {	//์†Œ๋ฉธ์ž
		cout << name << " ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค." << endl;
	}
};

int main() {
	cout << "๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธ ํ™•์ธ" << endl;
	{
		SimpleClass obj1("์ฒซ๋ฒˆ์จฐ");
		SimpleClass obj2("๋‘๋ฒˆ์จฐ");
		cout << "๋ธ”๋ก ๋‚ด์—์„œ ์ž‘์—… ์ค‘" << endl;
	}	// ๋ธ”๋ก ๋. obj1 obj2 ์ž๋™ ์†Œ๋ฉธ

	cout << "๋ธ”๋ก์„ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค." << endl;

	return 0;
}

์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๊ฐ€ ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ๋ณดํ†ต ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ๋Š” obj1๊ณผ obj2๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋ฉฐ, ๊ทธ์— ๋งž๊ฒŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋„ ๋‘ ๋ฒˆ ํ˜ธ์ถœ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฌดํ•œ์ • ์ƒ์‚ฐํ•ด๋‚ด๊ณ  ์ด์ „์— ๋งŒ๋“  ๊ฐ์ฒด๋“ค์ด ํ˜„์žฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์—๋„ ๊ณ„์† ๋‚จ์•„ ์žˆ๋‹ค๋ฉด, ๋ถˆํ•„์š”ํ•œ ์šฉ๋Ÿ‰์„ ์žก์•„๋จน๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ์†Œ๋ฉธ์ž ์—ญ์‹œ ์กด์žฌํ•œ๋‹ค. ์†Œ๋ฉธ์ž๋Š” ๊ฐ์ฒด์˜ ์ˆ˜๋ช…์ด ๋๋‚  ๋•Œ ํ˜ธ์ถœ๋˜๋ฉฐ, ๋‚จ์€ ์ž์›๋“ค์„ ์ •๋ฆฌํ•œ๋‹ค(๊ฐ์ฒด์˜ ์†Œ๋ฉธ์€ ์ปดํŒŒ์ผ๋Ÿฌ/๋Ÿฐํƒ€์ž„ ๋“ฑ์ด ํ•ด์ค€๋‹ค). ๋’ท์ •๋ฆฌ ๋А๋‚Œ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค. C++์—๋Š” ๊ธฐ๋ณธ ์†Œ๋ฉธ์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํŠน์ •ํ•œ ์ƒํ™ฉ์—์„œ ์šฐ๋ฆฌ๋Š” ํด๋ž˜์Šค ๋‚ด์— ์ง์ ‘ ์†Œ๋ฉธ์ž๋ฅผ ์ •์˜ํ•ด์ฃผ์–ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๋™์  ๋ฉ”๋ชจ๋ฆฌ๋“ค์ด๋‹ค.

 

๊ผญ ์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„(ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„) ๋™์  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์€ ์กด์žฌ๋‹ค. new, new[], malloc์œผ๋กœ ์ •์˜๋˜์—ˆ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ delete, delete[], free()๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๊ธฐ๋ณธ ์†Œ๋ฉธ์ž ์™ธ ์ง์ ‘ ์†Œ๋ฉธ์ž๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. ์ง์ ‘ ํ•ด์ œํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ผ์œผํ‚จ๋‹ค. ์ด ๋ฉ”๋ชจ๋ฆฌ๋“ค์€ ์šฐ๋ฆฌ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์ง€๋งŒ, ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•˜์—ฌ ๋ˆ„์ ๋˜๊ธฐ์—... ์„œ๋ฒ„์™€ ๊ฐ™์€ ์žฅ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐˆ์ˆ˜๋ก ์†์‹ค์ด ์ปค์ง„๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” RAII ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜์ง€๋งŒ ์—ญ์‹œ๋‚˜ ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๋งŒ๋Šฅ์€ ์•„๋‹ˆ๋‹ค.

 

 

๋‚˜๋„ ๋‚ด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋˜๋Š”์ค„ ๋ชฐ๋ž์„œ...

๊ทธ๋ ‡๊ธฐ์— ๋™์  ๋ฉ”๋ชจ๋ฆฌ๋“ค์€ ์ด ์‚ฌ์ง„ ์† ์—ฌ์ž์นœ๊ตฌ์™€ ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ์•ž์œผ๋กœ ์šฐ๋ฆฌ ๋ชจ๋‘ ๊ท€์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ  "๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๋งํ•ด"๋ผ๋Š” ์ƒ๋‚จ์ž ๋Œ€์‘์„ ํ•ด๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ?