전문가 c++ , 바야네 스트롭 창시자 공부후 정리
할당하고 해제 시에는 반드시 nullptr 처리도 해야 한다.
이중 해제, 댕글링 포인터를 방지할 수 있다.
-> nullptr 을 delete 할 경우, 컴파일러가 그냥 지나친다.
댕글링 포인터 접근시에는 런타임 오류가 뜨니까 이게 더 낫다.
(차라리 다른 메모리 접근하는 것보다는)
배열을 할당할 경우, 반드시 [] 대괄호를 delete [] data; 사용해서 해지해야 한다. 배열의 사이즈는 대괄호를 통해 접근이 가능하기 때문이다.
그렇지 않다면, 배열이 아닌 0번째 원소만 해제되는 것이고, 나머지 배열 원소들은 메모리 리크를 발생하게 된다.
생성자를 호출함.
캐스팅할 필요 없음.
주의할 점.
: 배열 해제할 시 delete[] 해야 함.
-> 무시한다면, 미정의 동작이 발생함.
표준 문서에서 언급도 안함!
int *p = new int[4];
delete p; // error : 미정의 동작할 수 있음.
delete [] p; // ok : 공식 문서대로 작성한 거임.
: 클래스 a를 만들고, 객체 b ,c 를 malloc와 new 로 동적할당하라.