[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
댓글을 사용할 수 없습니다.