ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Effective C++...15
    일지 2022. 6. 15. 07:25

    new 및 delete를 사용할 때는 형태를 반드시 맞추자

    delete의 동작 방식

    기본적인 delete는 주어진 객체의 소멸자를 호출하고 메모리에서 제거한다.

    반면에 delete[]는 컴파일러에게 주어진 객체가 배열이라는 사실을 전달하게 되고 컴파일러는 해당 포인터 앞의 몇 바이트를 읽어 배열의 크기를 확인하고 그 크기만큼 객체의 소멸자를 호출하고 메모리에서 제거한다.

     

    형태를 맞추지 않을 때 문제가 되는 경우

    • 배열이 아닌 객체를 delete[]로 제거하는 경우 객체 앞의 몇 바이트를 읽고 그만큼 제거하려고 시도하지만 해당 위치에 소멸자가 없거나 다른 객체가 있을 것이므로 에러가 발생한다.
    • 배열을 delete로 제거하는 경우 주어진 배열의 첫 번째 객체만 제거하고 나머지 요소들은 메모리에 그대로 남게 된다.

     

    댓글

Designed by Tistory.