类中类的大小

The size of a class within a class

本文关键字:      更新时间:2023-10-16

为什么类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 中声明它们的重点(。

相关文章:
  • 没有找到相关文章