동적 할당: 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;
}

 

실행화면