728x90

배열 사이즈를 미리 알 수 없을 때

new operator를 통해 컴파일이 아닌 프로그램 실행 중 동적으로 할당할 수 있다
위 예시와 같이 미리 int로 size 변수를 선언한 후 → new int[size] 선언 → cin 입력으로 저장하면 된다

int main() {

    int size, i;
    std::cout << "배열의 크기를 입력하세요: ";
    std::cin >> size;
    int* dynamicArray = new int[size]; 
    //배열 사이즈를 미리 알 수 없을 때, new operator를 통해 컴파일이 아닌 프로그램 실행 중 동적으로 할당할 수 있다
	//위 예시와 같이 미리 int로 size 변수를 선언한 후 → new int[size] 선언 → cin 입력으로 저장하면 된다
    for (i=0;i<size;i++){
        dynamicArray[i] = i;
    }

    for (i=0;i<size;i++){
        cout<<dynamicArray[i]<<endl;
    }
    
    delete[] dynamicArray;

}

/*
배열의 크기를 입력하세요: 5
0
1
2
3
4
*/

- new 연산자를 사용한다면 memory leak를 방지하기 위해 반드시 delete를 해주어야 한다

 

동적 할당의 유용성

 

가변적인 크기: 프로그램이 실행 중, 데이터 구조의 크기를 변경해야 할 때 유용함

- 배열의 크기를 동적으로 조정하거나 필요에 따라 메모리를 할당할 수 있음

 

메모리 사용 최적화: 정적 할당(static allocation)은 메모리를 미리 할당하므로 메모리 낭비가 발생할 수 있음

- 동적 할당은 필요한 만큼 메모리를 할당하므로 메모리 사용을 최적화할 수 있음

 

유연성: 동적 할당은 복잡한 데이터 구조를 생성하고 관리하는 필요한 '유연성'을 제공

- 동적으로 할당된 메모리를 사용하여 복사, 이동, 삽입, 삭제 등의 작업을 수행할 있음

 


delete의 추가 예시

MyClass* obj = new MyClass;
delete obj; // 클래스 객체 해제
int* dynamicArray = new int[10];
delete[] dynamicArray; // 배열 해제
class MyClass {
private:
    int* data;
public:
    MyClass() {
        data = new int;
    }
    ~MyClass() {
        delete data; // 멤버 변수에 대한 동적 할당 메모리 해제
    }
};
class MyClass {
private:
    int* dataArray;
public:
    MyClass(int size) {
        dataArray = new int[size];
    }
    ~MyClass() {
        delete[] dataArray; // 배열에 대한 동적 할당 메모리 해제
    }
};

 

728x90

'개발 > c++' 카테고리의 다른 글

[디버깅 노트] 포인터 관련 유의사항  (0) 2023.10.20
[c++] 입력에서 띄어쓰기  (1) 2023.10.20
[c++] vector  (0) 2023.09.25
[c++] const / 초기화 리스트!!  (0) 2023.09.24
[c++] 서로 다른 & (참조자/주소반환)  (0) 2023.09.24

+ Recent posts