Rumah > pembangunan bahagian belakang > C++ > Mengapakah Menggunakan Penunjuk Kelas Mengelakkan Ralat \'Jenis Tidak Lengkap\' dalam Definisi Kelas Rekursif?

Mengapakah Menggunakan Penunjuk Kelas Mengelakkan Ralat \'Jenis Tidak Lengkap\' dalam Definisi Kelas Rekursif?

Susan Sarandon
Lepaskan: 2024-12-10 03:14:10
asal
294 orang telah melayarinya

Why Does Using a Class Pointer Avoid

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;
}
Salin selepas log masuk

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;
};
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan