pada prinsipnya:
1. Tipe kelas C++ adalah tipe nilai, yang berarti bahwa ketika objek kelas dipakai, memori dialokasikan pada tumpukan.
Dengan cara ini, jika tipe kelas didefinisikan seperti ini
kelas A
{
publik:
ke dalam aku;
A A;
}
Ini akan jatuh ke dalam loop tak terbatas, karena ketika membuat instance objek A, A perlu menghitung ruang memori yang ditempati oleh objek tersebut berdasarkan tipe anggota (anggota data ditentukan berdasarkan tipe, dan kode anggota fungsi disimpan dalam exe Untuk memetakan ke memori, cukup gunakan pointer untuk menunjuk ke alamat memori, dan tambahkan beberapa informasi deskripsi kelas, tetapi sizeof tidak menampilkan penggunaan memori bagian informasi deskripsi ini Saat menemukan suatu objek a dari tipenya sendiri, ia menghitung data yang digunakan oleh a. Ruang memori, dan a adalah tipe A, jadi ulangi.
Jadi di C++
Dapat berisi pointer dengan tipenya sendiri (sering digunakan dalam daftar tertaut)
kelas A
{
publik:
ke dalam aku;
A * pa;
}
Ruang memori yang ditempati oleh variabel penunjuk mudah ditentukan. Jumlah panjang kata mesin menunjukkan berapa banyak ruang yang ditempati variabel penunjuk.
2. Tipe kelas dalam C# adalah tipe referensi, yang pada dasarnya adalah sebuah pointer.
Oleh karena itu, semua objek kelas di C# sendiri berukuran 4 byte (mesin 32-bit) dan berisi alamat memori, yang menunjuk ke ruang memori heap.
kelas A
{
publik ke dalam saya;
publik A a;
}
Sebuah objek = baru A();
Objek itu sendiri menempati 4 byte memori dan menyimpan alamat memori heap. Ukuran memori ini adalah 8 byte (int 4 byte, a juga empat byte). menyimpan alamat lain di memori heap, menunjuk ke ruang memori 8-byte.
Karena kita dapat menentukan berapa banyak ruang memori yang ditempati oleh objek A (4 byte, semua objek kelas C# menempati 4 byte, dalam mesin 32-bit), kita dapat mendefinisikan
-