【发布时间】:2020-04-09 06:27:22
【问题描述】:
假设我在不使用 new 运算符的情况下创建了一个对象:
Object b;
我正在使用我的对象类的默认构造函数。说这个类给对象一个属性
int objectID; 。
我知道我可以通过执行 b.Display() 来操作我的对象,例如,如果我定义了一个 Display() 方法。我知道当我以这种方式创建对象时,它的属性存储在堆栈中。
但我不明白b到底包含什么?
(我知道如果我以这种方式通过对象创建 Object * b = new Object; b 将指向将存储在堆上的属性 objectID。)
谢谢!
【问题讨论】:
-
在第二个例子中
b是一个指向对象的指针。我不太明白你在问什么。 -
我问的是第一个例子。我理解的第二个例子。我将重新表述:在第一个示例中使用对象 b; b里面存储了什么值?
-
"我知道,当我以这种方式创建对象时,它的属性存储在堆栈中。" 1) 从技术上讲 - C++ 标准不会强制编译器完全使用堆栈。它只是定义了“自动变量存储”,以及对此的要求。堆栈只是一个实现细节。 2) 技术上#2:没有minimal reproducible example,就无法判断它是否会分配到“堆栈”上,因为这取决于声明此类变量的位置。例如:如果是全局变量,则不会在“栈”中分配。
-
b包含一个Object。然后,您可以使用.访问它的成员。 但是第二个例子中 b 怎么指向对象的第一个属性(意思是 objectID)? 这仅适用于标准布局类。如果您的类不是标准布局,则指针不一定指向第一个成员。指针指向Object。 -
b是一个Object。它包含Object包含的所有内容。我真的不明白你为什么要问。
标签: c++ object pointers memory-management stack