int _tmain(int argc, char** argv) {
string *stringArray = new string[100];
delete stringArray;
}
잘못된점이 보이는가? delete를 보면 잘못된 점을 찾을 수 있다. new 로 배열을 하당했는데 delete[]가 아닌 delete이다. 이렇게 되면 문제가 무엇이냐 하면 delete가 할당한 데이터가 배열인지 아닌지 자동으로 확인하지 못한다는 것이다. 100개의 배열을 할당했는데 delete를 사용하면 나머지 99개는 붕~ 뜨는것이다. 그러므로
"나는 배열을 할당해제할 것이다~" 라는 것을 알리기위해 delete 앞에 []를 써주는것이다. 여기서 궁금한점!
"delete[]은 배열의 크기를 어떻게 알고 전부 할당해제해주는가?" 이다
원리는 간단하다. 우리가 new int[100]으로 할당하면
이런식으로 할당하기 때문이다.(모든 컴파일러가 이렇게 하는건 아니라고 한다. 근데 대체로 이렇게한다고 한다.)
delete[]는 맨 앞에 배열 갯수를 읽고 할당을 해제한다.
그렇다고 배열로 할당한것이 아닌 객체 하나만 할당한다고 앞에 똑같이 갯수가있는건 아니다. 객체 하나만 할당하면은 그거 하나만 덩그러니 있다.
이것만은 잊지 말자!
1. new 표현식에 []를 썼으면, 대응되는 delete 표현식에도 []를 써야한다. 마찬가지로 new 표현식에 []를 안 썼으면, 대응되는 delete표현식에도 []를 쓰지 말아야 한다.