ใน 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