도서 : 초보자를 위한 C++ 프로그래밍(성안당)
지음 : 강성수 지음
- 자료형에 대해 동적으로 메모리를 확보하려면 new 연산자를, 할당한 동적 메모리 공간을 해제(free)하려면 delete 연산자를 사용한다.
- 형식 : 클래스명 *포인터 변수 = new 클래스명; -> int *pt = new int;
- delete 포인터 변수; -> delete pt;
- malloc과 free와 비슷하다. -> ip = (int *)malloc(sizeof(int)); -> free(ip);
- 실습 - 한 개의 변수에 대한 동적 메모리 할당
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
#include <iostream>
using namespace std;
int main() {
int *pt = new int;
cout << "pt의 주소 : " << pt << endl;
*pt = 123;
cout << "pt안의 값 : " << *pt << endl;
delete pt;
return 0;
} |
cs |
- 결과
- new[] 연산자와 delete[] 연산자
- 단일 변수 등과 같은 인스턴스뿐만 아니라 배열이나 구조체, 클래스 같은 연속된 메모리 공간도 동적으로 메모리를 확보하려면 new[] 연산자를 사용하고, 할당한 동적 메모리 공간을 해제(free)하려면 delete[] 연산자를 사용한다.
- 형식 : int *pt = new int[10]; -> delete[] pt;
- 실습 - 동적 메모리를 사용한 문자열 역순으로 변환하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
#include <iostream>
using namespace std;
char *reverse(char *word, int len);
int main() {
char W[] = "I can do it!";
cout << reverse(W, strlen(W)) << endl;
return 0;
}
char *reverse(char *word, int len) {
char *pt = new char[len + 1];
for (int i = 0; i <= len ; i++) {
pt[i] = word[len - i - 1];
}
pt[len] = NULL;
return pt;
} |
cs |
- 결과