문제의 코드:
void deleteForMe(int* pointer) { delete[] pointer; }
포인터가 다음을 가리키지 않으면 정의되지 않은 동작이 발생합니다. 배열은 맹목적으로 delete[] 작업을 수행합니다. 그러나
int main() { int* arr = new int[5]; deleteForMe(arr); return 0; }
과 같이 포인터가 배열을 참조하는 경우 OS는 지정된 배열 요소만 삭제하고 그 이상으로 진행하지 않는다는 것을 알고 있습니다.
이 동작의 핵심은 다음과 같습니다. C 호환 언어로서 C의 역사적 뿌리에 있습니다. 불필요한 오버헤드로 배열을 사용하지 않는 프로그래머에게 부담을 주지 않기 위해 delete[] 구문이 도입되었습니다.
다음과 같이 배열이 아닌 할당이 이루어진 경우:
Foo* foo = new Foo;
추가 없음 어레이 지원에 오버헤드가 발생합니다. 그러나 배열 할당의 경우 이러한 오버헤드가 존재합니다. 런타임 라이브러리가 이 정보를 사용해야 함을 나타내려면 프로그래머는 배열 포인터에 대해 delete[]를 지정해야 합니다.
따라서 delete와 delete[] 사이의 선택은 삭제되는 특정 할당에 따라 결정됩니다. 이를 통해 보다 세밀한 메모리 관리가 가능하며 C의 미니멀리즘 철학에 부합합니다.
위 내용은 `delete[]`는 배열에서 삭제할 요소 수를 어떻게 알 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!