C 에서는 동적 메모리 할당 및 반환을 위해 malloc()와 free()를 사용하지만
C++에서는 new와 delete 연산자를 이용한다
* 자바에서는 new연산자로 객체를 생성할때 사용한다.
* malloc 은 할당받는 크기를 지정해야한다.또한 리턴되는 포인터를 형변환 해야하는 불편함이 있다
동적 메모리를 사용하는 이유는?
사용할 자료의 크기를 미리 알 수 있다면 정적 할당이 편하다.
하지만 얼마나 필요한지 모를 때가 더 많다. 이러한 문제를 해결하기 위해 동적 메모리 할당을 한다.
delete p;로 메모리를 반납하면 연결이 끊어진다.
배열의 동적 할당 및 반환
[사용형식]
데이터 타입 *포인터변수=new 데이터타입[배열의 크기]
delete [] 포인터변수;
#include <iostream>
using namespace std;
int main(){
int *p=new int[5];
//힙에서 메모리를 받지 못한 경우
if(!p){
cout<<"메모리 할당 실패";
return 0;
}
for(int i=0;i<5;i++){
p[i]=i;
}
for(int i=0;i<5;i++){
cout<<p[i]<<'\t';
}
delete []p;
return 0;
}
p가 배열에 대한 포인터이므로
for(int i=0;i<5;i++){
*(p+i)=i;
} 도 사용 가능하다.
초기값 지정 // delete
int *pArray=new int[]{1,2,3,4} //1,2,3,4로 초기화된 정수 배열 생성
delete []pArray;
'C++ Toast' 카테고리의 다른 글
[C++] 날짜를 다루는 Date클래스를 작성하기 (0) | 2024.08.02 |
---|---|
[C++] 구조체와 클라스의 차이점 (0) | 2024.07.31 |
[C++] 영문 텍스트를 입력받아 알파벳 히스토그램을 그리는 프로그램을 작성하라 (1) | 2024.07.24 |
[C++] 문자열을 하나 입력받고, 문자열의 부분 문자열을 다음과 같이 출력하는 프로그램을 작성하라 (0) | 2024.07.24 |
[C++] 한 라인에 ';'으로 5개의 이름을 구분하여 입력받아, 각 이름을 끊어내어 화면에 출력하여라 (0) | 2024.07.23 |