C에서는 힙메모리 영역을 사용할 때 malloc(), free()를 사용했다.
C++에서는 malloc과 유사한 new, free와 유사한 delete 가 있다.
#include <iostream>
int main(){
int* p = new int;
*p = 10;
std::cout << *p << std::endl;
delete p;
return 0;
}
배열 갯수, 배열의 값들을 받아 배열을 만들어보자.
#include <iostream>
int main() {
int arr_size;
std::cout << "array size : ";
std::cin >> arr_size;
int *list = new int[arr_size];
for (int i = 0; i < arr_size; i++) {
std::cin >> list[i];
}
for (int i = 0; i < arr_size; i++) {
std::cout << i << "th element of list : " << list[i] << std::endl;
}
delete[] list;
return 0;
}
/* 결과
array size : 3
2
1
4
0th element of list : 2
1th element of list : 1
2th element of list : 4
계속하려면 아무 키나 누르십시오 . . .
*/
T* pointer = new T[size];
T* pointer = (T*)malloc(sizeof(T)*size);
에서 이렇게 예쁘게 바꼈다.delete[] T;
구조체도 malloc, free 하듯 new, delete 해보자.
typedef struct tagAniaml{
char name[30];
int age;
int health;
int food;
int clean;
} Animal;
//main.c
Animal *list[10];
int animal_num = 0;
...
list[animal_num] = new Animal;
...
for(int i = 0 ; i != animal_num; i++)
delete list[i];
list[anmial_num] = new Anmial ; // (Anmial*)malloc(sizeof(Anmail));
규칙을 한번 살펴보자. 위의 코드에서 사용된 new와 delete 이다.
new | delete |
---|---|
int * p = new int | delete p |
int * list = new int[arr_size] | delete[ ] list |
(Animal*) list[n] = new Animal | delete list[n] |
고로 바로위 코드의 delete는
list[n]변수에 그냥 new만 시켜준 메모리를 지우면 돼서,
'delete list[n]'
이다.