본문 바로가기

C,C++

new, delete

* C의 malloc과 free의 C++ 버전이다.


C에서

int *n = (int*)malloc(sizeof(int));

free(n);


을 통해 동적할당 및 해제를 했다면, C++에서는


int *n = new int;

delete n;


배열의 경우,


int *n = new int[array_size];

delete[] n;


을 통해 동적 할당 및 해제를 해줄 수 있다.


new의 경우, 메모리 할당 실패 시 NULL 포인터를 반환하기 때문에


int *n = new int[4];


if(!n)을 통해 메모리 할당 실패 예외 처리를 해줄 수 있다.



프로젝트의 규모가 크고, 동적 할당이 매우 많은 경우 new의 성공 여부를 계속 검사하는 코드는 성능을 저하시킨다.


따라서 debug 파일을 따로 두어 서비스를 실행하기 전에는 new의 성공 여부를 검사하고


서비스를 실행한 후에는 성공 여부를 검사하지 않는 것이 하나의 방법이다.


#include <iostream> #define DEBUG 1 //#define DEBUG 0 using std::cin; using std::cout; using std::endl; int main(){ int size; cin >> size; int * arr = new int[size]; #if DEBUG == 1 cout << "DEBUG MODE" << endl; if(arr == NULL){ cout << "모리 할당 실패" << endl; return -1; } cout << "모리 할당 성공" << endl; #endif return 0; }

#define DEBUG 를 통해서, DEBUG를 1과 0으로 조정하여 검사 여부를 간단하게 정할 수 있다.

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

C++ lower_bound, upper_bound  (0) 2018.12.26
콜라한캔 :: 16진수 문자열로 변환  (0) 2018.12.23
void 포인터  (0) 2018.12.12
Reference  (0) 2018.12.09
inline  (0) 2018.12.09