C++에서 변수의 공간 기억 부류(Storage Class)는 변수의 수명과 범위를 결정합니다. 이 코드 예제에서는 자동 변수, 정적 변수, 동적 메모리 할당 등 다양한 기억 부류를 사용한 예제를 보여주고 있습니다. 주석을 포함한 코드의 한 줄 한 줄을 분석하여 C++의 기억 부류에 대해 자세히 설명하겠습니다.
int main()
{
    {
        // 자동 변수, 블록을 벗어나면 해제됨, 블록에 들어올 때마다 초기화
        int num0;
        // 정적 변수, 블록을 벗어나도 해제가 되지 않음. 프로그램 종료 시 해제, 단 한 번 초기화
        static int num1;
    }
int num0;: num0은 자동 변수(Automatic Variable)로, 블록 내에서 선언된 로컬 변수입니다. 
static int num1;: num1은 정적 변수(Static Variable)로, 해당 블록 내에서 선언되었지만, 블록을 벗어나도 해제되지 않습니다.
    {
        for (int i = 0; i < 10; ++i)
        {
            int num0 = 0;
            ++num0;
            cout << num0 << endl; // 1
            static int num1 = 0;
            ++num1;
            cout << num1 << endl; // 계속 증가
        }
    }
for 루프 내에서 num0과 num1의 선언:
int num0 = 0;: num0은 매 반복마다 다시 초기화되며, ++num0 연산 후 값이 1이 됩니다. 이 값은 매번 동일하게 출력됩니다.static int num1 = 0;: num1은 처음 루프에 진입할 때 한 번만 초기화됩니다. 이후 루프를 반복할 때마다 ++num1이 호출되어 값이 계속 증가합니다. 이 값은 매번 더 큰 값으로 출력됩니다.출력 결과:
num0은 매번 1이 출력됩니다.num1은 루프를 돌 때마다 증가하여 1, 2, 3, ... 10과 같이 출력됩니다. 이는 정적 변수가 프로그램 종료 시까지 값이 유지된다는 것을 보여줍니다.    {
        // 동적 공간, 이름이 없다
        int *p = new int;
        delete p; // 수동으로 해제야 함
        
        // 해당 블록이 벗어날 때 p 자체는 해제가 되지만 p가 가리키는 *p는 해제 되지 않는다.
    }
}
int *p = new int;: new 연산자를 사용해 힙(heap) 메모리에서 정수를 위한 동적 공간을 할당합니다. 
p를 통해 접근할 수 있습니다.delete p;: 동적 할당된 메모리를 해제합니다. 
delete는 new로 할당된 메모리를 반환하며, 해제되지 않으면 메모리 누수가 발생할 수 있습니다.p 자체는 스택 메모리에서 관리되며, 블록을 벗어나면 자동으로 해제됩니다. 그러나 p가 가리키는 힙 메모리는 delete를 사용해 수동으로 해제해야 합니다.블록을 벗어날 때:
p는 자동 변수로서 스택에서 해제됩니다. 그러나 만약 delete p;가 호출되지 않았다면, *p가 가리키는 힙 메모리는 해제되지 않고 남아 있을 수 있습니다. 이는 메모리 누수를 초래할 수 있으므로, 동적 메모리는 항상 적절하게 해제되어야 합니다.자동 변수(Automatic Variable):
정적 변수(Static Variable):
동적 메모리 할당(Dynamic Memory Allocation):
new 연산자를 통해 힙에서 메모리를 동적으로 할당할 수 있으며, 이 메모리는 이름이 없습니다.delete를 통해 수동으로 해제해야 하며, 그렇지 않으면 메모리 누수가 발생할 수 있습니다.