类中类的大小
The size of a class within a class
为什么类A的对象是4个字节(它不考虑B类和C类(。
我如何创建对象 A,以便同时创建 B 和 C?
那么对象的大小会改变吗?如果不是,那么对象B和C是否仍被视为对象A本身的一部分?
class A
{
public:
A()
{
a=9;
//B objB; //you wont be able to call since A::B::B() is private
//C objC; //same as above
}
int a;
class B
{
B()
{
b=10;
}
int b;
};
class C
{
public:
int c,d,e,f,g;
};
};
因为,在类 A 中,只有int a;
是类作用域中的成员变量,它计为类的大小。
在创建对象之前,类本身不占用任何空间。您已经使用以下代码创建了对象,但是如果您将其设置为类 B 和 C 的公共构造函数并将其添加到 A 的构造函数中,则代码将不会作为 B 的构造函数执行,因为它是私有的:
B objB;
C objC;
它在构造函数中是本地的,并在构造函数完成执行后解除分配。
首先你需要明白的是,类声明就像一个蓝图,不占用任何数据存储器。因此,类 B 和 C 存在,但不占用任何内存,因为对象未实例化。
您正在 A 的构造函数中创建它的局部变量。
class A
{
public:
int a;
int x; //added an additional variable (this should increase the size of object to 8)
A()
{
a=9;
//Below 2 objects are allocated on stack not object memory
B objB;
C objC;
//Memory for objects objB and objC are released after exit from constructor
}
//class B and C are accessible only within class A
class B
{
public: //made public so object can be instantiated.
int b;
B()
{
b=10;
}
};
class C
{
public:
int c,d,e,f,g;
};
};
在类 A 中添加整数 x 将使大小再增加 4 个字节。 上述类的总大小现在为 8 个字节。 在构造函数中声明的任意数量的局部变量都不会增加类的大小。
定义与其实例之间存在差异。当您执行对象的大小时,您计算的是实例的大小,而不是类的大小。由于特定于 A 实例的唯一信息是整数 a,因此该实例的大小仅为整数。
B和C不是A定义的一部分。你可能已经在 A 的作用域中声明了 B 类和 C类,但由于你没有在 A 中声明任何 B 或 C 成员,那么,在 A 的内存中没有 B 或 C 的实例。
类 B 和 C 确实是创建的,但只能在 A 的上下文中使用(这是在 A 中声明它们的重点(。
相关文章:
- 没有找到相关文章