Rumah >pembangunan bahagian belakang >C++ >Mengapakah Menggunakan Penunjuk Kelas Mengelakkan Ralat \'Jenis Tidak Lengkap\' dalam Definisi Kelas Rekursif?
Rekursi Menghalang Definisi Kelas
Pertanyaan pengaturcaraan baru-baru ini menangani isu pengisytiharan ahli persendirian dalam kelas yang mencerminkan jenis kelas itu sendiri. Khususnya, kod berikut menimbulkan ralat "jenis tidak lengkap":
class A { private: A member; }
Walau bagaimanapun, menggunakan penuding dan bukannya pengisytiharan ahli langsung ("A* ahli;") menyelesaikan isu tersebut. Mengapakah ini berlaku?
Jawapannya terletak pada proses definisi kelas. Apabila ahli diisytiharkan dalam definisi kelas, kelas itu sendiri masih ditakrifkan. Ini menjadikan jenis "A" tidak ditentukan, menjadikannya "jenis tidak lengkap." Sebaliknya, apabila menggunakan penuding, pengkompil boleh mengecam "A" sebagai nama kelas walaupun sebelum takrifannya selesai, membenarkannya mentakrifkan jenis "penunjuk kepada A".
Konsep ini melangkaui kelas. Mengisytiharkan jenis sebagai "Foo;" berkesan menandakan pengisytiharan kelas tanpa definisi penuhnya. Walau bagaimanapun, "Foo* foo;" boleh ditakrifkan, kerana ia mewakili penunjuk kepada jenis "Foo", yang pengkompil mengakui pada peringkat itu.
Rasional yang sama terpakai apabila menggunakan definisi jenis rekursif yang merujuk kepada dirinya sendiri. Walau bagaimanapun, mencapai ini menggunakan hanya penunjuk menawarkan pendekatan yang lebih mudah. Pertimbangkan alternatif berikut:
class A { private: boost::shared_ptr<A> member; };
Dengan menggunakan petunjuk pintar (cth., boost::shared_ptr), keperluan untuk pengurusan memori manual dihapuskan.
Atas ialah kandungan terperinci Mengapakah Menggunakan Penunjuk Kelas Mengelakkan Ralat \'Jenis Tidak Lengkap\' dalam Definisi Kelas Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!