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

1.아래 코드의 문제점은?
std::string *stringArray = new std::string[100]
...
delete stringArray;

힙이 제대로 반환되지 않는다.

또한 컴파일러는 string 객체가 하나만 할당되어 있다고 판단해서 소멸자도 한 번밖에 호출되지 않는다.

2. 해결 방법은?

new 연산자를 배열 형태로 사용했다면 delete 할 때도 delete[ ] 연산자를 사용한다.

std::string *stringArray = new std::string[100]
...
delete[] stringArray;

정리

  • new 표현식에 [ ]를 썼으면, 대응되는 delete 표현식에도 [ ]를 써야 한다.
  • 마찬가지로 new 표현식에 [ ]를 쓰지 않았으면, 대응되는 delete도 [ ]를 사용하지 말아야 한다.

results matching ""

    No results matching ""