C++에서도 C언어에서 사용한 malloc과 free를 사용하여 힙 메모리에 할당 가능
하지만, C++ 언어 차원에서 지원하는 것은 new와 delete임
new는 malloc에 대응대는 것으로 메모리를 할당하고,
delete는 free에 대응되는 것으로 메모리를 해제함
new 사용 방법
T* pointer = new T;
// new 와 delete
#include <iostream>
int main()
{
int* p = new int; // int 크기의 공간을 할당하여 그 주소값을 p에 대입
*p = 5; // 할당된 공간에 값 대입
std::cout << *p << '\n';
delete p; // 공간을 해제하기 위해 delete 사용
// delete로 해제 할 수 있는 메모리 공간은 사용자가 new를 통해서
// 할당한 공간만 가능
return 0;
}
실행 결과
10
-> 경고 메시지가 표출됨
// 지역 변수 delete
#include <iostream>
int main()
{
int a = 5;
delete &a;
}
#include <iostream>
using namespace std;
int main()
{
int arr_size;
cout << "array size : ";
cin >> arr_size;
int* list = new int[arr_size]; // 크기가 arr_size인 배열
// i는 for문 안에서 정의됨
// for문 밖에서는 사용할 수 없음
for (int i = 0; i < arr_size; i++)
{
cin >> list[i];
}
for (int i = 0; i < arr_size; i++)
{
cout << i << "th element of list : " << list[i] << '\n';
}
delete[] list;
}
실행 결과
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
변수를 사용할 때 컴파일러는 그 변수를 가장 가까운 범위(scope)부터 찾음
int a = 4;
{
std::cout << "외부의 변수 1" << a << std::endl;
int a = 3;
std::cout << "내부의 변수 " << a << std::endl;
}
std::cout << "외부의 변수 2" << a << std::endl;
실행 결과
4
3 // scope로 범위를 달리 했으므로 int a = 4와 다른 변수임
4