【发布时间】:2013-11-18 05:14:42
【问题描述】:
这可能是重复的。但是,我找不到。
怀疑:
让我们假设 A 类和 B 类。
如果我这样做。
A* aPtr = new A; //This is an heap allocation
如果我这样做
B bObj; //This is stack allocatio
如果我有一个 C 类,它同时具有像这样的 A 和 B obj。
class C
{
A aObj;
B bObj;
};
如果C的分配是这样的:
C *cptr = new C; //here memory allocation for cptr is heap.
//But, what about aObj and bObj, which are not heap allocated?
aObj 和 bObj 是否都分配在堆上,尽管它们看起来像堆栈对象?
【问题讨论】:
-
都是堆分配。 C的构造函数会调用aObj和bObj的构造函数。如果这些构造函数要做一些独特的事情,比如使用私有分配器。 aObj 或 bObj 使用的一些内存可能不是来自堆。但这将是极其罕见的。
-
如果您停止将它们视为“堆栈”与“堆”并开始将它们视为“自动”与“动态”,这可能会有所帮助(或没有帮助),因为这是逐字记录它们的方式'在标准中有所描述。如果您想更深入地回答此类问题,那么这是一个很好的地方。 C++11 3.7.3 详细描述了Automatic storage duration; C++ 3.7.4 同样适用于动态存储持续时间。
标签: c++ memory-management heap-memory stack-memory