Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao kích thước của một lớp trống không phải là 0 trong C ++?


Giả sử chúng ta có một lớp trống trong C ++. Bây giờ chúng ta hãy kiểm tra xem kích thước của nó có bằng 0 hay không. Trên thực tế, tiêu chuẩn không cho phép các đối tượng (hoặc lớp) có kích thước 0, điều này là do điều đó có thể làm cho hai đối tượng khác nhau có cùng vị trí bộ nhớ. Đây là lý do đằng sau khái niệm rằng ngay cả một lớp rỗng cũng phải có kích thước ít nhất là 1. Người ta biết rằng kích thước của một lớp rỗng không phải là 0. Nói chung, nó là 1 byte. Xem ví dụ dưới đây.

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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

Đầu ra

1

Nó chỉ ra rõ ràng rằng một đối tượng của một lớp trống sẽ chiếm ít nhất một byte để đảm bảo rằng hai đối tượng khác nhau sẽ có địa chỉ khác nhau. Xem ví dụ dưới đây.

Ví dụ

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

Đầu ra

Not same

Đối với phân bổ động cũng vậy, từ khóa mới trả về địa chỉ khác với cùng một lý do.

Ví dụ (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;
}

Đầu ra

Not same