코딩 규칙 - 포인터에 대해서

보물창고·2022년 8월 15일
0

c++ basic 코드누리

목록 보기
24/50

업데이트 240821

  • 전문가 c++ , 바야네 스트롭 창시자 공부후 정리

  • 할당하고 해제 시에는 반드시 nullptr 처리도 해야 한다.
    이중 해제, 댕글링 포인터를 방지할 수 있다.
    -> nullptr 을 delete 할 경우, 컴파일러가 그냥 지나친다.
    댕글링 포인터 접근시에는 런타임 오류가 뜨니까 이게 더 낫다.
    (차라리 다른 메모리 접근하는 것보다는)

  • 배열을 할당할 경우, 반드시 [] 대괄호를 delete [] data; 사용해서 해지해야 한다. 배열의 사이즈는 대괄호를 통해 접근이 가능하기 때문이다.
    그렇지 않다면, 배열이 아닌 0번째 원소만 해제되는 것이고, 나머지 배열 원소들은 메모리 리크를 발생하게 된다.


malloc vs new 차이를 확실히 알고가자.

1. malloc

  • 반환타입이 void* 타입임 -> 형변환을 해야함.
  • malloc 호출만으로는 초기화가 이루어지지 않음.

2. new

  • 생성자를 호출함.

  • 캐스팅할 필요 없음.

  • 주의할 점.
    : 배열 해제할 시 delete[] 해야 함.
    -> 무시한다면, 미정의 동작이 발생함.
    표준 문서에서 언급도 안함!

int *p = new int[4];
delete p; // error : 미정의 동작할 수 있음.
delete [] p; // ok : 공식 문서대로 작성한 거임. 

problem

: 클래스 a를 만들고, 객체 b ,c 를 malloc와 new 로 동적할당하라.

  • 결과
    : malloc , free 의 경우, 생성자와 소멸자가 호출되지 않는 것을 확인할 수 있음.
profile
🔥🔥🔥

0개의 댓글