我不明白delete
当我想释放分配给new
. 在 C++ Premiere 书中写道:
这将删除 ps 指针指向的内存;它不会删除指针 ps 本身。例如,您可以重用 ps 来指向另一个新分配。您应该始终平衡使用 new 和使用 delete;否则,您可能会遇到内存泄漏——即,已分配但无法再使用的内存。如果内存泄漏变得太大,它可能会使寻求更多内存的程序停止。
因此,据我所知,delete
必须删除 pinter 指向的内存中的值。但事实并非如此。这是我的实验:
int * ipt = new int; // create new pointer-to-int
cout << ipt << endl; // 0x200102a0, so pointer ipt points to address 0x200102a0
cout << *ipt << endl; // 0, so the value at that address for now is 0. Ok, nothing was assigned
*ipt = 1000; // assign a value to that memory address
cout << *pt << endl; // read the new value, it is 1000, ok
cout << *((int *) 0x200102a0) << endl; // read exactly from the address, 1000 too
delete ipt; // now I do delete and then check
cout << ipt << endl; // 0x200102a0, so still points to 0x200102a0
cout << *ipt << endl; // 1000, the value there is the same
cout << *((int *) 0x200102a0) << endl; // 1000, also 1000 is the value
那么delete
真正做什么呢?