[C++] new, delete, 메모리 할당, 메모리 관리

728x90
반응형

new와 delete는 C++에서 새롭게 등장하는 키워드다. C언어에서 malloc과 free와 대응되는 키워드다. 아래 코드를 보자.

int main(void)
{
    int* ptr = new int;
    *ptr = 10;

    std::cout << *ptr << std::endl;

    delete ptr;

    return 0;
}

3번째 줄에서 int형 포인터 변수 ptr에 int형만큼의 메모리를 할당하고 4번째 줄에서 ptr이 가리키는 메모리 영역에 10을 저장한다. 그리고 8번째 줄에서 ptr의 메모리를 해지하는 코드다. 아래 코드는 위 코드의 C언어 버전이다.

int main(void)
{
    int* ptr = (int*)malloc(sizeof(int));
    *ptr = 10;

    printf("%d\n", *ptr);

    free(ptr);

    return 0;
}
반응형


new, delete 키워드를 사용해 배열을 할당 할수 있다. 아래 코드를 보자.

#include <iostream>

int main(void)
{
    int size;
    std::cout << "배열의 사이즈를 입력하세요 : ";
    std::cin >> size;

    int* list = new int[size];
    for(int i = 0; i < size; i++) {
        list[i] = i+1;
        std::cout << list[i] << std::endl;
    }

    delete[] list;
}

9번째줄에서 size 변수를 통해 입력받은 값 만큼 메모리를 할당하고있다. 배열을 생성할때는 9번째줄과 같이 new 키워드를 사용해 만들고자하는 배열의 자료형을 배열과 같이 써준다. 동적으로 할당한 메모리는 사용후 반드시 15째 줄과 같이 delete로 해지해 줘야한다. 아래 코드는 위 코드의 C언어 버전이다.

int main(void)
{
    int size;
    int* list;
    int i;
    printf("배열의 사이즈를 입력하세요 : ");
    scanf("%d", &size);

    list = (int*)malloc(sizeof(int) * size);

    for(i = 0; i < size; i++)   {
        list[i] = i + 1;
        printf("%d\n", list[i]);
    }

    free(list);

    return 0;
}





- 끝 -

728x90
반응형