본문 바로가기

C++

C++ 13일차 동적 할당

C++ 동적할당


C++에서는 동적으로 변수나 배열을 할당 할수 있는데 다음 예제를 보면서 해봅시다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int main() {
    int *= new int(5);
 
    cout << *<< endl;
    cout << a << endl;
    *= 10;
    cout << *<< endl;
    cout << a << endl;
    delete a;
    getchar();
    return 0;
}
cs


위의 예제는 변수를 동적할당하는 예입니다.

C++에서는 new라는 것을 사용하여 동적할당을 할수 있습니다.

포인터 a라는 변수에 int타입을으로 동적할당 하게됩니다.

그럼 포인터 a의 값은 동적으로 메모리에 들어가게되고

delete를 이용하여 메모리를 해제합니다.

그러하여 delete다음에 cout << *a << endl를 하여도 a의 값은 아무것도 출력이 되지 않습니다.


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
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int main() {
    int *arr;
    int len;
 
    cout << "동적 할당 : ";
    cin >> len;
 
    arr = new int[len];
 
    for (int n = 0; n < len;n++) {
        arr[n] = len - n;
    }
    for (int i = 0; i < len; i++) { 
        cout << arr[i] << endl;
    }
 
    delete[] arr;
    getchar();
    return 0;
}
cs


이번에는 배열을 동적할당 해보는 것입니다.

먼저 arr이라는 포인터를 만들고 len을 입력을 받고 new를 이용하여 배열의 동적할당을 할것입니다.

arr = new int[len];

arr에 len의 길이만큼 동적할당이 되었습니다.

그리고 포인터를 배열로 동적할당 하였으면 arr을 배열처럼 사용할수도 있는거 같습니다.

그리고 위의 예제는 변수이기에 delet를 그냥 써도 되지만 배열의 동적할대 해제는 조금 다름니다.

delete에 []붙여 delete[]이렇게 해주어야 배열의 동적할당이 해제됩니다.


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
#include <iostream>
#include <cstdio>
 
using namespace std;
 
class Vector2 {
public:
    Vector2() : x(0), y(0) {}
    Vector2(int k, int j) : x(k), y(j) { cout << this << " : Vector2(float x, float y)" << endl; }
 
    ~Vector2() {
        cout << this << " : ~Vector2()" << endl;
    }
 
    float GetX() const { return x; }
    float GetY() const { return y; }
 
private:
    int x;
    int y;
};
 
int main() {
    Vector2 a;
    Vector2 b(32);
 
    Vector2 *d1 = new Vector2();
    Vector2 *d2 = new Vector2(3,2);
 
    cout << d1->GetX() << " " << d1->GetY() << endl;
    cout << d2->GetX() << " " << d2->GetY() << endl;
 
    delete d1, d2;
    getchar();
    return 0;
}
cs


그리고 또한 객체에서도 동적할당을 할수있다.


위의 모든 예제는 유투브의 두들낙서님의 것을 보고 한것입니다.


'C++' 카테고리의 다른 글

C++ 15일차  (0) 2018.06.17
C++ 14일차  (0) 2018.06.12
C++ 12일차  (0) 2018.06.10
C++ 11일차  (0) 2018.06.05
C++ 10일차  (0) 2018.06.05