C와 C++의 메모리 동적할당을 알아보자.
C에서 사용하는 메모리 동적할당은 다음과 같다.
C언어에서는 malloc 과 calloc 그리고 realloc 을 사용하고, free를 통해서 동적할당된 변수를 날려줄 수 있다.
그러나 C언어에서의 동적할당은 free이후 메모리의 주소값이 들어있는 포인터를 NULL로 초기화 해주어야 했다.
C++에서의 동적할당을 살펴보자.
C++에서는 동적할당 시 C와 다르게 생성할 조건을 형변환 하지 않아도 자동으로 형변환 해주는 시스템을 가지고 있다. 다음을 살펴보자.
delete 문을 사용하여 동적할당 된 포인터 변수를 초기화 해줄수 있고 따로 포인터변수를 NULL로 초기화 하지 않아도 된다.
그 외에도 해당되는 사이즈를 직접 초기화 해줄 수도 있다.
new로 생성되는 동적배열을 2차원배열 처럼 사용해줄 수 도 있다.
int** ptrArr 로 new int*[5]를 생성하여. 5칸을 가진 한줄을 만들고.
각 칸마다 10개의 int칸을 동적배열로 생성하면. 5x10 2차원배열을 만들어서 사용할 수 있다.
그러나, 지울때 에는 역순으로. for문을 사용하여 53 - 54 줄 처럼 입력하여 지워주어야 한다.
그 후. 생성한 행 포인터를 delete 해야 완전하게 지워줄 수 있다.
malloc은 구조체에서 pod(plain old data 연속된 메모리) 타입을 인자로 받아와서 쓸 수 있다.
그러나, string, 함수 같은것은 pod타입이라서 malloc에서 사용할 수 없다.
new에서는 허용된다. 객체타입에 대한 동적 메모리할당을 지원하기 때문에, new는 객체 생성자를 호출하여 객체 탕비에 따라 필요한 메모리공간 을 자동으로 할당하고 객체 초기화를 수행한다.
또한, new는 malloc과 다르게. 생성과 동시에 할당된 메모리를 초기화해준다. malloc은 수동으로 초기화 해주어야 한다.
'서울게임아카데미 교육과정 6개월 C++ ~ DirectX2D' 카테고리의 다른 글
23일차 47.type_information 48.assert 49.functional 50.elliopsis 00. OPP에 대하여. (0) | 2023.04.20 |
---|---|
22일차 44.Structures 45.reference_variable 46.range_based_for_loop (0) | 2023.04.19 |
20일차 42.Array (0) | 2023.04.13 |
19일차 시험. (0) | 2023.04.09 |
18일차 35.macro_function, 36.type_inference, 37.funtion_overloading, 38.defalut_parameter, 39.string , 40.Pointer, 41.random_number (0) | 2023.04.06 |