💙ref.
1. 개요
프로그램의 메모리 힙 관리를 위해 C++에서는 new
와 delete
기능을 지원한다. 각각 C언어의 malloc
과 free
에 대응한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
int main()
{
int* p = new int; // int 크기의 공간을 할당해 주소값을 p에 대입
*p = 10; // p가 할당된 공간에 값 저장
std::cout << *p << std::endl;
delete p;
return 0; // 메모리에 할당된 공간 해제
}
// 실행 결과
// 10
단, new
로 할당된 공간만 delete
로 해제할 수 있다. 지역변수를 delete
로 해제하면 런타임 오류가 발생하니 유의하자.
2. 배열 할당
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
int main()
{
int arr_size; // 배열 크기
std::cout << "array size : ";
std::cin >> arr_size;
int *list = new int[arr_size]; //arr_size 크기의 int 배열 생성
for (int i = 0; i < arr_size; i++)
{
std::cin >> list[i];
}
for (int i = 0; i < arr_size; i++)
{
std::cout << i << "th element of list : " << list[i] << std::endl;
}
delete[] list; // 배열 해제
return 0;
}
// 실행 결과
// array size : 5
// 1
// 4
// 2
// 6
// 8
// 0th element of list : 1
// 1th element of list : 4
// 2th element of list : 2
// 3th element of list : 6
// 4th element of list : 8
- 배열 생성:
T* pointer = new T[size];
new T[size]
-delete[]
가 쌍을 이룸
*. 변수의 유효범위
지역변수 유효범위
1
2
3
4
5
6
// ...
{
int a = 4;
std::cout << a;
}
std::cout << a;
- 중괄호 밖
a
출력: 오류 발생
변수 우선순위
어떤 변수를 사용할 때, 컴파일러는 해당 변수를 가까운 범위부터 먼저 사용한다.
1
2
3
4
5
6
7
8
int a = 4;
{
std::cout << "외부 변수 1" << a << std::endl;
int a = 3;
std::cout << "내부 변수 1" << a << std::endl;
}
std::cout << "외부 변수 2" << a << std::endl;
-
출력 결과:
4
→3
→4
-
처음
a
로 정의된 변수는 외부 변수a
- 함수 내부에
a
를 새롭게 정의할 경우, 외부 변수는 내부 변수에 의해 가려짐- 중괄호를 지나면서 내부 변수 소멸
- 함수 외부에서 외부 변수가 유효한 영향을 미침
-
위 예제와 같이 같은 범위에서 동일한 변수를 선언하는 것은 허용되지 않는다.
컴파일러가 어떤 변수를 사용해야 할지 분명하지 않기 때문이다! 변수 이름을 지을 때 중복된 변수명은 사용하지 말자.
Leave a comment