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 |