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

ทำไมขนาดของ Empty Class ใน C++ ไม่ใช่ศูนย์?


ใน C++ ขนาดของ empty class (ไม่มี data member) ไม่ใช่ 0 ไบต์ มักจะเป็น 1 ไบต์ เพื่อให้ object แต่ละตัวมี address ที่แตกต่างกัน ตามมาตรฐาน C++

ตัวอย่าง

#include <iostream>
using namespace std;

class MyClass { };

int main() {
    cout << sizeof(MyClass); // ได้ 1
}

เอาต์พุท

1

เหตุผล

ถ้าขนาดเป็น 0 object สองตัวอาจมี address เหมือนกันได้ ซึ่งขัดกับกฎที่ว่า object ต่างๆ ต้องมี identity (address) แยกจากกัน

ตัวอย่างยืนยัน Address ต่างกัน

#include <iostream>
using namespace std;

class MyClass { };

int main() {
    MyClass a, b;
    if (&a == &b) cout << "Same";
    else cout << "Not same";
}

เอาต์พุท

Not same

Dynamic Allocation ก็เหมือนกัน

int main() {
    MyClass *a = new MyClass();
    MyClass *b = new MyClass();
    if (a == b) cout << "Same";
    else cout << "Not same";
}

เอาต์พุท

Not same

Empty Base Optimization (EBO)

ข้อยกเว้น: ถ้า empty class เป็น base class และไม่ใช่ virtual base compiler อาจ optimize ให้ขนาดเป็น 0 ได้ (Empty Base Optimization) แต่ object เองยังคงมีขนาด ≥ 1