나는 포인터를 공부하고있다. 나는 delete [] 연산자와 혼동했다. 내가 제대로 받았다면C++ delete [] 연산자 혼란
int* a = new int[12];
for (int i=0; i<12; i++)
a[i]=123;
delete[] a;
for (int i=0; i<12; i++)
cout <<a[i]<<" ";
이 delete[]
연산자는 배열에있는 모든 오브젝트를 32 파괴해야합니다 다음은 예입니다. 하지만 내 출력은 이것이다 :
10621288 10617028 123 123 123 123 123 123 123 123 123 123
만 처음 두 요소가 파괴된다. 내가 잘못 했나요?
@ kr4lj :이 경우 배열에 정수가 포함되어 있기 때문에 파괴 할 것이 없습니다. 배열 자체의 메모리 만 해제됩니다. 배열에 객체가 포함되어 있으면 소멸자가 하나씩 호출되는 것을 볼 수 있습니다. – Jon
나는 똑같은 짓을했는데 처음 두 요소는 0으로 만들었습니다. 메모리 위치를 물리적으로 삭제할 수는 없습니다. D는 컴파일러에서 0이 null이고 나중에 사용하기 위해 해제되면 0을 만듭니다. –