다음과 같은 경우가 있습니다.삭제 대 삭제 []
int *arrayP=new int[4];
arrayP[0]=0;arrayP[1]=1;arrayP[2]=2;arrayP[3]=3;
int *temp;
cout<<arrayP[0]<<endl;
temp=arrayP;
++arrayP;
cout<<arrayP[0];
cout<<arrayP[1];
delete temp;
cout<<arrayP[0];
출력
0
1
2
-1212222
는 왜 이렇게입니까? arrayP는 크기가 4 인 배열의 첫 번째 요소를 가리 킵니다. 따라서 temp도 첫 번째 요소를 가리 킵니다 temp 요소를 삭제하면 첫 번째 요소도 전체 정수 배열을 삭제합니다. 배열은 배열의 다음 요소 주소를 저장합니다. 따라서 어레이는 고아가 아닙니다. arrayP [0]가 가비지 값을 표시하면서 정수 배열을 삭제했다고 가정합니다.
그런 경우 (예 : temp 삭제시 전체 정수 배열이 삭제됩니다) 삭제 []와 삭제 사이의 차이.
이제 임시 임시 파일을 삭제하는 이유가 바로 여기에 있습니다. 'new'로 할당하지 않은 것을'delete'로 사용할 수 없습니다. 'new []'를 사용한다면'delete []'를 사용해야합니다. 일단이 규칙을 위반하면 모든 것이 의미가 없어집니다. 즉, 왜 누군가는'new []'을 사용할 것인가? –
Ok. 내 코드가 더 이상 배열의 첫 번째 요소를 필요로하지 않는다고 가정 할 때, 그 공간을 비울 수있는 방법이 없다고 가정 해 봅시다. (작업을 수행하는 데 더 짧은 배열에 복사하고 목록을 연결하는 것을 피하고 싶습니다.) – user2511713
배열의 첫 번째 요소가 필요하지 않지만 다른 요소가 필요하다면 참조 할 필요가 없습니다. 정말로 신경 쓰나요? – Bathsheba