๐ ํฌ์คํ
๋ด์ฉ
- ์ค๋์ malloc๊ณผ new์ ์ฐจ์ด์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ ์ฐจ์ด์
์ผ๋จ ๋ ๋ค ํ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ํจ์๋ฅผ ๋์ผํ๋ฐ 1๊ฐ์ง ๋ค๋ฅธ ์ ์ด ์์ต๋๋ค
- malloc : ํ ์์ญ์ size๋งํผ ๊ณต๊ฐ์ ํ ๋นํฉ๋๋ค.
- new : ํ ์์ญ์์ size๋งํผ ๊ณต๊ฐ์ ํ ๋นํ๊ณ ๊ฐ์ฑ์ ์์ฑ์๋ฅผ ํธ์ถํฉ๋๋ค.
๋ค์ ์ฝ๋๋ฅผ๋ณด๋ฉด ๋ณด๋ค ํ์คํ๊ฒ ์ ์ ์์ต๋๋ค.
โ
์ฝ๋
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "์์ฑ์ ํธ์ถ" << endl; }
~A() { cout << "์๋ฉธ์ ํธ์ถ" << endl; }
};
int main()
{
A* memory = (A*)malloc(sizeof(A));
A* a = new A();
}
โ
์คํ๊ฒฐ๊ณผ
// ์์ฑ์ ํธ์ถ
์คํ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด์ ์ ์๋ฏ์ด ์์ฑ์ ํธ์ถ์ด 1๋ฒ๋ง ์คํ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ malloc์ ํ ์์ญ์ ๊ณต๊ฐ๋ง ์์ฑ, new๋ ๊ณต๊ฐ ์์ฑ ํ ๊ฐ์ฒด ์์ฑ์ ํธ์ถ๊น์ง ๋๋ค๋ ๊ฑธ ์ ์ ์์ต๋๋ค.
๐ malloc์ผ๋ก ์์ฑ ํ ์์ฑ์ ํธ์ถ
๊ทธ๋ผ malloc ํจ์๋ก ์์ฑํ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๊น์?
๋ฌผ๋ก ์ด ๋ํ new์์ ์ง์ํ๊ณ ์์ต๋๋ค.
โ
์ฝ๋
#include <iostream>
using namespace std;
class A
{
public:
A() { cout << "์์ฑ์ ํธ์ถ" << endl; }
~A() { cout << "์๋ฉธ์ ํธ์ถ" << endl; }
};
int main()
{
A* memory = (A*)malloc(sizeof(A));
new(memory) A();
}
โ
์คํ๊ฒฐ๊ณผ
// ์์ฑ์ ํธ์ถ
์ ์ฝ๋์ ๊ฐ์ด new(value name) type() ํํ๋ก ํธ์ถ ์ ์์ฑ์๊ฐ ์ ์์ ์ผ๋ก ํธ์ถ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
C++ ํ ๋น์ new๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ ์๊ธฐ์ new๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๊ฒ ์ต๋๋ค.
ํ์ง๋ง VirtualAlloc์ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๋ค์ ๊ธ์์ ํ์ธํ์๊ธธ ๋ฐ๋๋๋ค.
๐ Freeํจ์ ํธ์ถ ์ ์์ฑ์ ํธ์ถ
โ
์ฝ๋
memory->~A();
free(memory);
โ
์คํ๊ฒฐ๊ณผ
// ์๋ฉธ์ ํธ์ถ
์ด์ฒ๋ผ malloc์ผ๋ก ์์ฑ๋ ๊ณต๊ฐ์ free๋ก ํด์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ์๋ฉธ์๋ฅผ ์ง์ ํธ์ถ ํ free() ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.