Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tại sao kích thước class rỗng không bằng 0 trong C++?

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.