C++ 在堆栈上创建的对象包含什么?

C++ 在堆栈上创建的对象包含什么?,c++,object,pointers,memory-management,stack,C++,Object,Pointers,Memory Management,Stack,假设我创建一个对象而不使用新操作符,如下所示: Object b; 我正在使用对象类的默认构造函数。假设这个类给对象一个属性 intobjectid。 我知道我可以通过执行b.Display()操作对象,例如,如果我定义了Display()方法。我知道,当我以这种方式创建对象时,它及其属性存储在堆栈上 但我不明白的是b到底包含什么? (我知道,如果我以这种方式通过object创建object*b=new object;b将指向存储在堆上的属性objectID。) 谢谢 它包含与在堆上分配对象时

假设我创建一个对象而不使用新操作符,如下所示:

Object b;
我正在使用对象类的默认构造函数。假设这个类给对象一个属性
intobjectid。
我知道我可以通过执行b.Display()操作对象,例如,如果我定义了Display()方法。我知道,当我以这种方式创建对象时,它及其属性存储在堆栈上

但我不明白的是
b
到底包含什么?

(我知道,如果我以这种方式通过object创建
object*b=new object;
b将指向存储在堆上的属性objectID。)


谢谢

它包含与在堆上分配
对象时存储在堆上的数据完全相同的数据:成员变量、填充、vtable指针、基类以及我忘记的任何其他内容。由于这是一个必须绘制内存布局的练习,我假设
对象
没有任何虚拟函数或基类,因此它将只是成员变量,可能是填充。

在第二个示例中
b
是指向对象的指针。我不太明白你在问什么。我在问第一个例子。第二个例子我理解。我将重新措辞:在第一个例子中,对象b;在B中存储了什么值?“我知道当我用它创建对象时,它的属性被存储在堆栈上。”1”技术上说,C++标准并没有强制编译器完全使用堆栈。它只是定义了“自动变量存储”,以及对它的要求。堆栈只是一个实现细节。2) 从技术上讲#2:如果没有,就不可能判断它是否将被分配到“stack”上,因为它取决于在哪里声明这样的变量。例如:如果它是一个全局变量,则不会在“堆栈”中分配它。
b
包含一个
对象
。然后使用
访问它的成员。但在第二个例子中,为什么b指向对象的第一个属性(意思是objectID)?这仅适用于标准布局类。如果类不是标准布局,那么指针不一定指向第一个成员。指向
对象
b
的指针是
对象
。它包含
对象
包含的所有内容。我真的不明白你为什么要问。