Rumah >pembangunan bahagian belakang >C++ >Mengapa Memanggil Kaedah Bukan Maya pada Penunjuk NULL Tidak Menghasilkan Gelagat Tidak Ditakrifkan?
Mengakses Ahli Kelas pada Penunjuk NULL
Walaupun diisytiharkan sebagai penunjuk kepada contoh jenis Foo, pembolehubah foo dimulakan kepada 0, menjadikannya penunjuk nol. Ini mungkin kelihatan berlawanan dengan intuisi, kerana mengakses ahli penuding nol lazimnya adalah tingkah laku yang tidak ditentukan. Walau bagaimanapun, keadaan tertentu membenarkan tingkah laku ini.
Invokasi Kaedah Bukan Maya
Kaedah bukan maya say_hi() berjaya digunakan walaupun penunjuk nol kerana ia tidak kaedah maya. Kaedah maya memerlukan objek yang sah untuk menentukan fungsi yang hendak dipanggil berdasarkan jenis objek. Kaedah bukan maya, sebaliknya, mempunyai alamat fungsi yang telah ditetapkan yang digunakan oleh pengkompil untuk menjana arahan panggilan fungsi langsung.
Secara khusus, pengkompil menjana kod yang setara dengan yang berikut:
void Foo_say_hi(Foo* this); Foo_say_hi(foo);
Oleh kerana fungsi say_hi() tidak merujuk penuding ini, ia memintas keperluan untuk membatalkan rujukan yang berpotensi batal penunjuk.
Peruntukan Objek
Pembolehubah foo ialah pembolehubah setempat dalam fungsi utama, jadi ia diperuntukkan pada timbunan fungsi. Sebagai pembolehubah penunjuk, objek sebenar yang ditunjuknya tidak diperuntukkan di sini. Nilai nol menunjukkan bahawa penunjuk tidak merujuk objek yang sah.
Atas ialah kandungan terperinci Mengapa Memanggil Kaedah Bukan Maya pada Penunjuk NULL Tidak Menghasilkan Gelagat Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!