这可能是重复的。但是,我找不到。
疑问:
让我们假设 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++ 时,我个人讨厌“堆”和“堆栈”这个词,因为 C++ 标准不强制执行内存分配位置。所有标准保证都是内存何时被释放。
因此,我更喜欢使用动态内存分配
和自动内存分配
这两个名称来区分两者。
当超出范围或它所在的对象被删除时,自动内存分配将被删除。
动态内存分配在代码中显式释放时将被删除。
像这样的C *cptr = new C;
是使用动态内存分配进行分配的,需要在程序结束之前删除,否则将出现未定义的行为。
其中B bObj;
将使用自动内存进行分配,并在其所在的对象被删除时被删除。
关于c++ - 堆栈或堆上的成员值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20040557/