[C++] 동적 할당: new, delete
동적 할당: 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;
}
실행화면
'⭐ Programming > C++' 카테고리의 다른 글
[C++] 타입 변환 2: 참조 타입 변환 (0) | 2022.04.08 |
---|---|
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환 (0) | 2022.04.08 |
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free (0) | 2022.04.07 |
[C++] 객체지향 마무리 (0) | 2022.04.06 |
[C++] 오버로딩과 오버라이딩의 차이 (0) | 2022.04.06 |
댓글
이 글 공유하기
다른 글
-
[C++] 타입 변환 2: 참조 타입 변환
[C++] 타입 변환 2: 참조 타입 변환
2022.04.08 -
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
2022.04.08 -
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free
2022.04.07 -
[C++] 객체지향 마무리
[C++] 객체지향 마무리
2022.04.06