이 내용은 저번에 포스팅 하려고 했습니다만... 제가 malloc&free의 개념이 모호해져서 다시 공부하고 오느라
조금 늦었습니다. 우선 C언어에서의 malloc&free는 동적할당을 함으로 정적할당보다 더 효율적으로 메모리를 사용할 수 있었습니다.
이 개념이 C++에서도 똑같이 적용되어 넘어왔으나 malloc&free의 단점인
-
할당 대상의 정보를 무조건 바이트로 받는다는 점
-
반환형이 void이기 때문에 적절한 형변환을 거쳐야한다는 점
이 두가지의 단점을 가지지 않은 다른 함수로 대체하여 나온 함수입니다. 이 함수가 바로 new&free 입니다.
그러면 저 두가지의 단점을 극복했다면 어떻게 극복했고 뭐가 더 좋기 때문에 C++에서 쓰이는지 알아보겠습니다.
우선 malloc을 대체한 키워드 new는
int형 변수의 할당 int * ptr1 = new int;
double형 변수의 할당 double * ptr2 = new double;
길이가 4인 int형 배열의 할당 int * arr1 = new int[4];
위와 같이 사용합니다. malloc은 (int*)malloc(sizeof(int)*4 처럼 길게 써야하는 대신 new는 훨씬 간결합니다.
free를 대체한 키워드 delete는 free와 비슷합니다.
int형 변수의 소멸 delete ptr1;
double형 변수의 소멸 delete ptr2;
길이가 4인 int형 배열의 할당 delete []arr1;
위와 같이 사용하나 배열일 때만 []를 사용하여 배열임을 알려주기만 하면 됩니다.
C++에서 C언어 함수를 사용할 수 있지만 위와 같이 명백한 대체 함수가 있을 때는 대체함수를 사용하는 것이 좋습니다.
특히 malloc&free는 C++에서는 에러를 발생시킬 수 있기 때문에 유의 하셔야 됩니다.
new&delete와 malloc&free는 사용처는 같지만 전혀 다른 구동방식을 가졌기 때문입니다.
간단한 예로 new는 할당 받은 공간도 참조할수 있습니다. 포인터를 사용하지 않아도 된다는 점이 특히하지요
말한김에 C++에서도 C언어의 표준 함수를 사용할 수 있습니다.
stdio.h는 cstdio로
stdlib.h는 cstdlib로
math.h는 cmath로
string.h는 cstring으로 바꿔서 사용하시면 됩니다.
헤더에서 앞에 c가 붙고 뒤에 .h가 빠졌다는 것만 알아두시면 됩니다.
위에서 말씀드렸지만 C++에서 C언어 함수가 구동되지만(하위 버전과의 호환성을 위해), 오류가 발생할 가능성이 높기 때문에 C++에서는 C++함수를
사용하시는게 맞는겁니다.
C++은 C++표준 헤더를 사용합니다.
제가 직접 공부하고 쓰기 때문에 미숙하고 오류가 있을 수 있습니다. 그러니 항상 댓글로 알려주시면 감사하겠습니다.
'알음알음-IT > 개발_기초_코딩_C++' 카테고리의 다른 글
C++ 공부하기 - 6.참조자와 함수 (0) | 2020.02.04 |
---|---|
C++ 공부하기 - 5.참조자(Reference) (0) | 2020.02.04 |
C++ 공부하기 - 4.이름공간(namespace) (0) | 2020.02.04 |
C++ 공부하기 - 3.인라인 함수 (0) | 2020.02.04 |
C++ 공부하기 - 2.함수의 오버로딩와 매개변수의 디폴트 값 (0) | 2020.02.04 |