동적 할당: new, delete

 

인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!

 

 


 

malloc / free   vs.   new  / delete

 

malloc / free 함수!

new / delete연산자(operator)

  • C++에 추가됨

 

 

malloc/free  vs  new/delete

-  사용 편의성: new/delete 승!

타입에 상관없이 특정한 크기의 메모리 영역을 할당 받으려면?  malloc/free 승!

그런데 둘의 가장 가장 근본적인 중요한 차이는 따로 있음!

 

new/delete는 (생성타입이 클래스일 경우) 생성자/소멸자호출해준다!!!

 

 

void* pointer = malloc(12);
Monster * m1 = (Monster*)pointer;
m1->_hp = 100;
m1->_x = 1;
m1->_y = 2;
free(pointer); // malloc으로 만들었으면 free로 지워줘야 함

 

Monster* m2 = new Monster;
m2->_hp = 200;
m2->_x = 2;
m2->_y = 3;
delete m2; // new로 만들었으면 delete로 지워줘야 함

 

new[ ]  /  delete[ ]

 

Monster* m3 = new Monster[5];
m3->_hp = 200;
m3->_x = 2;
m3->_y = 3;
Monster* m4 = (m3 + 1);
m4->_hp = 300;
m4->_x = 4;
m4->_y = 5;
delete[] m3;

 


 

전체 코드

 

더보기
#include <iostream>
using namespace std;
class Monster{
public:
Monster() { cout << "Monster()" << endl; }
~Monster() { cout << "~Monster()" << endl; }
public:
int _hp;
int _x;
int _y;
};
Monster monster[500 * 10000]; // 상한선 숫자로 만든다. 몬스터가 1마리이면 메모리 낭비이다
int main()
{
void* pointer = malloc(12);
Monster * m1 = (Monster*)pointer;
m1->_hp = 100;
m1->_x = 1;
m1->_y = 2;
// 만약에 free 하지 않으면 메모리 누수 발생
free(pointer); // malloc으로 만들었으면 free로 지워줘야 함
Monster* m2 = new Monster;
m2->_hp = 200;
m2->_x = 2;
m2->_y = 3;
delete m2; // new로 만들었으면 delete로 지워줘야 함
Monster* m3 = new Monster[5];
m3->_hp = 200;
m3->_x = 2;
m3->_y = 3;
Monster* m4 = (m3 + 1);
m4->_hp = 300;
m4->_x = 4;
m4->_y = 5;
delete[] m3;
return 0;
}

 

실행화면