Or *_*aba 0 c++ oop object low-level private-members
我尝试更深入地了解 Public | 之间的差异。私人 | 在 C++ 中从低级角度保护。
三者的差异在记忆中表现如何?
private,public并且protected不会导致成员被存储在特定的内存区域中。访问由编译器检查。在最底层,没有区别。
但是,访问说明符确实会影响您对类成员在内存中的排列顺序的保证。
分配具有相同访问控制(条款 [class.access])的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址。具有不同访问控制的非静态数据成员的分配顺序未指定(条款 [class.access])。实现对齐要求可能会导致两个相邻的成员不会立即被分配;管理虚拟函数 ([class.virtual]) 和虚拟基类 ([class.mi]) 的空间需求也是如此。
这意味着,对于
struct foo {
private:
int x;
protected:
int a;
int b;
public:
int m;
int n;
private:
int y;
};
Run Code Online (Sandbox Code Playgroud)
你只得到了保证,在内存中x到来之前y,a来之前b和m来之前n。除此之外,未指定成员在内存中的排列顺序。
但是,内存中成员的顺序很少是有用的信息。因此,说访问说明符与“低级内存”无关并不太错。