C++ Features of C ++ only.
1.Features of C ++ only.
언제나 메모리를 관리하는 문제는 중요했다. 그래서 컴파일 시에 모든 변수의 주소값이 확정되어야만 했다.
제약이 있기 때문에 피하기 위해서 힙(Heap)이라는 공간이 따로 생겼다.
힙(Heap)은 자유롭게 할당하고, 해체할 수 있는 공간으로써 원하는 만큼 사용할 수 있는 공간이다.
cf) 스택은 컴파일러에 의해 완벽히 확정되어 안정성이 보장된다.
힙(Heap)은 사용자가 스스로 제어해야 하는 부분이다.
C++도 C와 마찬가지로 malloc과 free함수를 지원하여 힙의 할당을 지원한다.
여기에 C++은 new와 delete가 있다. new는 malloc과 대응하는 것이고, delete는 free에 대응하는 것으로 메모리를 해제한다.
#include
using namespace std; int main() { int* p = new int ; *p = 10; cout << *p << endl; delete p; return 0; }
int영역이 할당 되어 10이 출력되었다.
int *p = new int; 는 int크기의 공간을 할당하여 그 주소값을 p에 집어넣었음을 알 수 있다.
new를 사용하는 방법은 Q* pointer = new Q;와 같다. Q에는 임의의 타입이 들어가고, 이제 Q 위치에 할당된 공간에
*Q = 10;를 통해서 값을 집어넣었고, 출력했다. 할당된 공간을 해제하기 위해 delete를 사용했고, delete Q를 하게 되면
Q에 할당된 공간에 해제된다. 중요한 건 delete로 해제할 수 있는 메모리 공간은 사용자가 new를 통해 할당된 공간만 가능하다.
#includeusing namespace std; int main() { int a = 5; delete &a; return 0; }
#includeusing namespace std; int main() { int arr_size; cout << "array size : "; cin >> arr_size; int *list = new int [arr_size]; 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] << endl; } delete [] list; return 0; }
int arr_size;
cout << "array size : ";
cin >> arr_size;
int *list = new int [arr_size];
배열의 크기를 잡을 arr_size라는 변수를 정의하였고, 입력을 받았다. list에 new를 이용해서 크기가 arr_size인 int배열을 생성하였다.
배열을 생성할 때는 []를 이용해 배열의 크기를 넣어주면 된다.
Q* pointer = new Q [size];는 Q를 임의의 타입이라 하면, 이런 식의 코드를 짜면 된다. 즉 list는 크기가 arr_size인 int배열을 가지게 된다.
전에도 말했듯이 C는 변수의 선언을 모두 최상단에 입력해야 됐지만 C++는 다르다. 아무 위치에 써도 되고, 특정 변수는 특정 변수를 포함하고
있는 중괄호를 빠져 나갈 떄 사라진다.
설명을 통해 파악해 보자.
{
int Q = 8;
cout << "INPUT Q : " << Q;
}
cout << "OUTPUT Q : " << Q;
int q = 10;
{
cout << "외부의 변수 7" << q << endl;
int q = 9;
cout << "내부의 변수 " << q << endl;
}
cout << "외부의 변수 8" << q << endl;
for(int k = 0; k< arr_size; k ++)
{
cin >> list[k];
}
for(int k = 0; k < arr_size; k ++)
{
cout << k << "th element of list : " << list[k] << endl;
}
delete [] list;
'#Programming Language > C++' 카테고리의 다른 글
C++ Object-oriented programming. (0) | 2018.03.30 |
---|---|
C++ Everything in an object. (0) | 2018.03.30 |
C++ The difference between C and C ++. (0) | 2018.03.29 |
C++ Common in C and C ++. (0) | 2018.03.29 |
C++ Introduction and Basic Elements. (0) | 2018.03.29 |