Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เหตุใดขนาดของคลาสว่างจึงไม่เป็นศูนย์ใน C ++


สมมติว่าเรามีคลาสว่างหนึ่งคลาสใน C++ ตอนนี้ให้เราตรวจสอบว่าขนาดของมันคือ 0 หรือไม่ อันที่จริง มาตรฐานไม่อนุญาตให้อ็อบเจ็กต์ (หรือคลาส) มีขนาด 0 เนื่องจากจะทำให้อ็อบเจ็กต์ที่แตกต่างกันสองออบเจกต์มีตำแหน่งหน่วยความจำเดียวกันได้ นี่คือเหตุผลเบื้องหลังแนวคิดที่ว่าแม้แต่คลาสว่างก็ต้องมีขนาดอย่างน้อย 1 เป็นที่ทราบกันดีว่าขนาดของคลาสว่างนั้นไม่ใช่ศูนย์ โดยทั่วไปคือ 1 ไบต์ ดูตัวอย่างด้านล่าง

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include<iostream>
using namespace std;
class MyClass {
};
int main() {
   cout << sizeof(MyClass);
}

ผลลัพธ์

1

มันแสดงให้เห็นอย่างชัดเจนว่าอ็อบเจ็กต์ของคลาสว่างหนึ่งคลาสจะใช้เวลาอย่างน้อยหนึ่งไบต์เพื่อให้แน่ใจว่าอ็อบเจ็กต์ที่แตกต่างกันทั้งสองจะมีแอดเดรสต่างกัน ดูตัวอย่างด้านล่าง

ตัวอย่าง

#include<iostream>
using namespace std;
class MyClass {
};
int main() {
   MyClass a, b;
   if (&a == &b)
      cout <<"Same "<< endl;
   else
      cout <<"Not same "<< endl;
}

ผลลัพธ์

Not same

สำหรับการจัดสรรแบบไดนามิกด้วย คำหลักใหม่จะส่งคืนที่อยู่ที่แตกต่างกันด้วยเหตุผลเดียวกัน

ตัวอย่าง (C++)

#include<iostream>
using namespace std;
class MyClass {
};
int main() {
   MyClass *a = new MyClass();
   MyClass *b = new MyClass();
   if (a == b)
      cout <<"Same "<< endl;
   else
      cout <<"Not same "<< endl;
}

ผลลัพธ์

Not same