Penunjuk dalam C Selepas Padam
Pertimbangkan coretan kod berikut dalam C :
<code class="cpp">A* a = new A(); A* b = a; delete a; A* c = a; // Undefined behavior in C++11 A* d = b; // Potentially legal, but uncertain</code>
Kod ini menaikkan soalan: apakah yang berlaku apabila mengakses nilai penuding yang disalin selepas penuding asal telah dipadamkan?
Dalam C 11, mengakses nilai penuding yang telah dipadamkan membawa kepada tingkah laku yang tidak ditentukan. Ini terpakai kepada kedua-dua petunjuk a dan b. Menyalin nilai a ke dalam c juga tidak ditentukan, sebagai titik kepada memori yang dialokasikan.
Walau bagaimanapun, dalam C 14, tingkah laku menjadi ditentukan pelaksanaan. Piawaian menentukan bahawa:
"Arahan melalui nilai penunjuk tidak sah dan menghantar nilai penunjuk tidak sah kepada fungsi deallocation mempunyai gelagat tidak ditentukan. Sebarang penggunaan lain nilai penunjuk tidak sah mempunyai tingkah laku ditentukan pelaksanaan."
Oleh itu, dalam C 14, mengakses nilai b, yang merupakan salinan a, juga ditakrifkan pelaksanaan. Ia berpotensi membawa kepada gelagat yang tidak ditentukan, tetapi ia juga boleh dikendalikan secara berbeza oleh pelaksanaan tertentu.
Ringkasnya, kedua-dua A* c = a; dan A* d = b; tidak ditakrifkan dalam C 11 dan pelaksanaan-ditakrifkan dalam C 14. Ini kerana kedua-dua penunjuk a dan b menghala ke memori tidak sah selepas operasi pemadaman.
Atas ialah kandungan terperinci Apa yang Berlaku kepada Penunjuk yang Disalin dalam C Selepas Yang Asal Dipadamkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!