โดยหลักการแล้ว:
1. ประเภทคลาสของ C++ เป็นประเภทค่า ซึ่งหมายความว่าเมื่อมีการสร้างอินสแตนซ์ของคลาสอ็อบเจ็กต์ หน่วยความจำจะถูกจัดสรรบนสแต็ก
ด้วยวิธีนี้หากกำหนดประเภทคลาสเช่นนี้
คลาส A
-
สาธารณะ:
ฉัน;
เอ;
-
มันจะตกอยู่ในวงวนไม่สิ้นสุด เนื่องจากเมื่อสร้างอินสแตนซ์วัตถุของ A นั้น A จำเป็นต้องคำนวณพื้นที่หน่วยความจำที่วัตถุนั้นครอบครองโดยขึ้นอยู่กับประเภทของสมาชิก (สมาชิกข้อมูลจะถูกกำหนดตามประเภทและรหัสของสมาชิก ฟังก์ชั่นถูกจัดเก็บไว้ใน exe ในการแมปไปยังหน่วยความจำ เพียงใช้ตัวชี้เพื่อชี้ไปยังที่อยู่หน่วยความจำ และเพิ่มข้อมูลคำอธิบายคลาสบางส่วน แต่ sizeof จะไม่แสดงการใช้หน่วยความจำของส่วนนี้ของข้อมูลคำอธิบาย) a ในประเภทของตัวเอง จะคำนวณข้อมูลที่ใช้โดย a พื้นที่หน่วยความจำ และ a เป็นประเภท A ดังนั้นให้ทำซ้ำ
ดังนั้นใน C ++
สามารถมีพอยน์เตอร์ประเภทของตัวเองได้ (มักใช้ในรายการที่เชื่อมโยง)
คลาส A
-
สาธารณะ:
ฉัน;
เอ*ป้า;
-
พื้นที่หน่วยความจำที่ตัวแปรพอยน์เตอร์ครอบครองนั้นง่ายต่อการกำหนด จำนวนคำของเครื่องบ่งชี้ว่าตัวแปรพอยน์เตอร์ใช้พื้นที่เท่าใด
2. ประเภทคลาสใน C# เป็นประเภทอ้างอิง ซึ่งโดยพื้นฐานแล้วจะเป็นพอยน์เตอร์
ดังนั้นคลาสอ็อบเจ็กต์ทั้งหมดใน C# จึงมีขนาด 4 ไบต์ (เครื่อง 32 บิต) และมีที่อยู่หน่วยความจำ ซึ่งชี้ไปที่พื้นที่หน่วยความจำฮีป
คลาส A
-
สาธารณะ int ฉัน;
สาธารณะ ก;
-
วัตถุ = ใหม่ A();
ออบเจ็กต์นั้นใช้หน่วยความจำ 4 ไบต์และเก็บที่อยู่หน่วยความจำฮีป ขนาดของหน่วยความจำนี้คือ 8 ไบต์ (int 4 ไบต์ a ก็เท่ากับสี่ไบต์) เมื่อสมาชิก a ถูกสร้างอินสแตนซ์ เนื้อหาของ a จะไม่เป็นโมฆะ เก็บที่อยู่อื่นไว้ในหน่วยความจำฮีปโดยชี้ไปที่พื้นที่หน่วยความจำ 8 ไบต์
เนื่องจากเราสามารถกำหนดได้ว่าอ็อบเจ็กต์ A ครอบครองพื้นที่หน่วยความจำเท่าใด (4 ไบต์ อ็อบเจ็กต์คลาส C# ทั้งหมดใช้ 4 ไบต์ในเครื่อง 32 บิต) เราจึงสามารถกำหนดได้
-