malloc
int* p;
p = (int*)malloc(sizeof(int) * 2);
p[0] = int(0);
p[1] = int(1);
cout << p[0] << "\n" << p[1];
p = (int*)realloc(p, sizeof(int) * 3);
p[2] = 2;
cout << p[0] << " " << p[1] << " " << p[2] << "\n";
free(p);
- 재할당 받은 뒤에 기존에 할당받았던 값 이외에 값인 3번째에만 값을 넣어준다.
- 재할당 받은 뒤에도 기존에 값은 정상적으로 존재하는 것을 확인할 수 있다.
- 단순히 메모리 사이즈만 변경하는 것이 아닌 내용물도 복사를 한다.
- 사이즈를 줄이면 기존에 할당받았던 값은 없어진다.
new
int* p2;
p2 = new int[2];
p2[0] = 0;
p2[1] = 1;
cout << p2[0] << " " << p2[1] << "\n";
delete[] p2;
p2 = new int[2];
cout << p2[0] << " " << p2[1] << "\n";
- 할당된 후에 재할당할 때는 꼭 삭제 후 할당을 해야한다. 그렇게하지않으면 메모리가 누수된다.
차이점
- malloc은 메모리를 동적으로 할당하는 것만이 목적이므로 초기값을 지정해 줄 수 없지만, new의 경우는 할당과 동시에 초기화가 가능하다.
- new 키워드는 생성자를 자동으로 호출하게 된다. 생성자는 객체를 자동으로 초기화 해주는 함수로, malloc과 new의 가장 큰 차이점이다.
- 객체가 아니고, 재할당이 빈번하게 일어나야된다면, malloc과 free가 오히려 더 좋은 선택이 될 수도 있다.
https://boycoding.tistory.com/204
'C++ > Basic' 카테고리의 다른 글
함수 오버로딩 (0) | 2021.09.17 |
---|---|
vector와 list의 차이점 (0) | 2021.09.16 |
[C++] 가변인자 템플릿 (0) | 2021.08.25 |
[C++] 람다 (0) | 2021.08.24 |
[C++] fstream으로 입력 출력 (0) | 2021.08.19 |