[C++] new delete 할당과 해제
c++에서는 포인터변수라는 것이 있는데
메모리의 주소를 가리키는 변수이다.
이 안에는 빈공간으로 되어있고 주소만 가리키는데 포인터변수에 메모리를 할당하는 것을 new할당이라고 한다.
new와 delete
포인터변수는 선언시 그 변수 자체는 4바이트지만 그 변수 안에 메모리를 잡는 것이 아니다.
아래 그림을 보면 int* p는 메모리를 잡지 않고 다른 int형 변수의 주소값을 가리키기만 한다.
예) int a = 10; int* p = NULL; p = &a; printf("%d", *p); // 10이 찍힘 p = NULL; // 다시 초기화 *p = 10; // 에러 p = new int; // new할당(메모리 자료형만큼 할당) *p = 10; // 메모리를 할당했으니 에러 안난다. printf("%d", *p); // 10이 찍힘 delete p; // 메모리를 할당했으니 꼭 해제해줘야된다. p = NULL; |
그리고 c++에서 new할당을 할 때 중요한 것은 메모리관리이다.
new를 했으면 반드시 delete를 해줘야된다.
메모리를 할당했는데 int a;처럼 알아서 사라지는 게 아냐?가 아니다.
꼭 짝을 이뤄서 delete를 해줘야 메모리누수가 안 생기고
p의 값에는 NULL값을 넣어줘야 좋은 코드라 할 수 있다.
만약에 delete를 안하면 메모리누수가 생기고 그 메모리는 다시 쓸 수 없기 때문에 컴퓨터의 성능이 떨어진다.
이런 부분들이 많아지면 점점 느려져서 꼭 해줘야된다.(물론 재부팅하면 다시 메모리는 초기화된다)
'Programming > C++_C#' 카테고리의 다른 글
memmove함수 (0) | 2017.04.05 |
---|---|
[C++] 동적배열 (0) | 2017.03.30 |
[C++] 논리연산자 (0) | 2017.03.24 |
memcpy함수 (0) | 2017.03.23 |
[C++] 문자열 대문자를 소문자로, 소문자를 대문자로 (0) | 2017.03.20 |