2010-03-21 7 views
2

나는이 작품을 모두 삭제하는 경우 확실하지 않다 :개체의 단일 배열을 삭제 하시겠습니까?

p = new int[1]; 

delete p 

delete [] p; 

모두 작동하는 경우, 위의 두 delete의 차이점은 무엇입니까?

+1

'new'와'delete'가 일치해야합니다. 그렇지 않으면 정의되지 않은 동작이 발생합니다. 하나의 플랫폼에서 작업하는 것은 정의되지 않은 동작의 결과 일 수 있으며, 모든 것을 심각하게 손상시킬 수 있습니다. 하지 마. – GManNickG

답변

1

delete p은 하나의 요소 만 삭제합니다. delete [] p은 배열을 삭제합니다. new type[]을 사용하는 경우 delete []을 사용하십시오.

new의 사용자가 [] 인 경우 delete[]입니다.

어쨌든이 부분을 정확히 복제해야합니다.

4

하나의 인스턴스 배열은 여전히 ​​배열입니다. 단순히 특별한 경우가 아니므로 배열로 취급하고 단일 객체로 취급 할 필요가 없습니다. 배열이 아닌 delete이 중단 될 수 있습니다.

개체 배열 앞에는 배열 크기를 나타내는 숫자가 올 수 있습니다. 이 경우 delete이 아니라 delete[]이 아니며 올바른 포인터를 free에 전달할만큼 똑똑합니다.

2

이들은 이 아니라입니다. delete p이 컴파일되지만 런타임시 문제를 일으킬 수 있습니다.

delete poperator delete(void*)이고, delete []operator delete[](void*)입니다. 기본 동작은 delete[]이고 delete을 호출하지만 delete []의 사용자 지정 연산자가 구현 된 경우 delete을 호출하면 문제가 발생합니다 (침묵하는 경우 일 것임).

new[]을 사용했다면 경험적으로 볼 수 있습니다.

+0

경험칙이 아니라 요구 사항. – GManNickG

관련 문제