Theo chuẩn C++, kích thước của bất kỳ đối tượng nào phải ≥ 1 byte. Điều này đảm bảo hai đối tượng khác nhau luôn có địa chỉ bộ nhớ khác nhau.
Ví dụ minh họa
#include <iostream>
using namespace std;
class MyClass { };
int main() {
cout << sizeof(MyClass); // Xuất 1
return 0;
}
1
Chứng minh địa chỉ khác nhau
int main() {
MyClass a, b;
if (&a == &b) cout << "Same\n";
else cout << "Not same\n";
return 0;
}
Not same
Cấp phát động cũng vậy
int main() {
MyClass* a = new MyClass();
MyClass* b = new MyClass();
cout << (a == b ? "Same" : "Not same") << endl;
return 0;
}
Not same
Nguyên nhân sâu xa
- C++ yêu cầu mỗi đối tượng có "định danh" (identity) duy nhất qua địa chỉ.
- Nếu size = 0, mảng
MyClass arr[10]sẽ có tất cả phần tử trùng địa chỉ → vi phạm quy tắc. - Cơ chế Empty Base Optimization (EBO) cho phép class rỗng làm base class không tăng kích thước derived class.
Tóm lại: Size ≥ 1 byte là yêu cầu bắt buộc của chuẩn C++ để đảm bảo tính đúng đắn của mô hình đối tượng.