delete와 delete[]의 차이점

이 선배님께서 정말 잘 정리해 주셨다!

개요

int* p = new int[5];

delete p;
delete[] p;

위의 delete와 delete[]는 차이가 존재하는가? → 존재한다

new를 사용하여 메모리 할당 시, 배열의 크기 정보를 저장하기 위하여 내부적으로 4바이트 만큼 메모리를 더 할당한다. 이 메모리를 해제 해보자.

  • delete - 배열의 크기 확인 없이 메모리 해제
  • delete[] - 배열 크기 확인 후 메모리 해제

테스트 - delete[]

class Test {
public:
	Test() { cout << "생성" << endl; }
	~Test() { cout << "소멸" << endl; }
};

int main() {
	Test* test = new Test[3];
	delete[] test;
	return 0;
}

결과

Untitled

테스트 - delete

class Test {
public:
	Test() { cout << "생성" << endl; }
	~Test() { cout << "소멸" << endl; }
};

int main() {
	Test* test = new Test[3];
	delete test;
	return 0;
}

결과

Untitled

Untitled

참고자료