【发布时间】:2021-09-17 17:14:27
【问题描述】:
只想知道数据成员在内存、堆或堆栈中的位置。
这是我的代码:
#include <iostream>
#define p(s) std::cout << s << std::endl
class Fook
{
public:
char c = 'c'; //
Fook() {
p(c);
}
};
class IDK
{
public:
int* arr = new int[1]; //
IDK() {
Fook fook3; //
arr[0] = 90;
Fook* fook4 = new Fook(); //
p(arr[0]);
}
};
int main(int argc, char const *argv[])
{
Fook fook1;
Fook* fook2 = new Fook();
IDK idk1;
IDK* idk2 = new IDK();
return 0;
}
编译并给出预期的输出
c
c
c
c
90
c
c
90
在上面的代码示例中,obj *fook2 和 *idk2 分配在堆内存上,fook1 和 idk1 分配在堆栈内存上。
- 在栈内存上是
fook2->c(obj在堆内存上) - 是
*arrinidk1在堆内存上(obj 在栈内存上) - 在堆内存上的
idk2中是*arr - 是堆内存上
idk1的ctor中的*fook4 - 是堆内存上
idk2的ctor中的fook3 - 是堆内存上
idk2的ctor中的*fook4
总结一下,int main(int argc, char const *argv[])中创建的每个对象的数据成员在内存(栈还是堆)中的什么位置
【问题讨论】:
-
成员变量存储在对象中,所以唯一的问题是你的对象存储在哪里
-
Gnn...、在栈上和在堆上是实现细节……标准用语是自动 i> 用于在定义它的块的末尾达到其生命周期结束的任何东西,并且 分配 用于必须明确销毁的任何东西。而栈和堆只是分别自动和分配的常见实现。
-
@SergeBallesta 说得好