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 *a = new int(5); cout << *a << endl; cout << a << endl; *a = 10; cout << *a << 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(3, 2); 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 |
그리고 또한 객체에서도 동적할당을 할수있다.
위의 모든 예제는 유투브의 두들낙서님의 것을 보고 한것입니다.