หนังสือ C ++ ที่ฉันอ่านระบุว่าเมื่อตัวชี้ถูกลบโดยใช้delete
โอเปอเรเตอร์หน่วยความจำในตำแหน่งที่ชี้ไปนั้น "ว่าง" และสามารถเขียนทับได้ NULL
นอกจากนี้ยังระบุว่าตัวชี้จะยังคงชี้ไปที่สถานที่เดียวกันจนกว่าจะมีพระราชเสาวนีย์หรือตั้งค่า
ใน Visual Studio 2012 อย่างไรก็ตาม ดูเหมือนจะไม่เป็นเช่นนั้น!
ตัวอย่าง:
#include <iostream>
using namespace std;
int main()
{
int* ptr = new int;
cout << "ptr = " << ptr << endl;
delete ptr;
cout << "ptr = " << ptr << endl;
system("pause");
return 0;
}
เมื่อฉันคอมไพล์และรันโปรแกรมนี้ฉันจะได้ผลลัพธ์ดังต่อไปนี้:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
ระบุที่อยู่ที่พอยน์เตอร์ชี้ไปอย่างชัดเจนเมื่อมีการเรียกลบ!
เหตุใดจึงเกิดขึ้น สิ่งนี้เกี่ยวข้องกับ Visual Studio โดยเฉพาะหรือไม่?
และถ้าลบสามารถเปลี่ยนที่อยู่ที่ชี้ไปยังไงก็ได้ทำไมไม่ลบโดยอัตโนมัติตั้งค่าตัวชี้เป็นNULL
แทนที่จะเป็นที่อยู่แบบสุ่ม