c++ - 堆栈或堆上的成员值?

标签 c++ memory-management heap-memory stack-memory

这可能是重复的。但是,我找不到。

疑问:

让我们假设 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/

相关文章:

C++:解析 XML 文件时出现问题(MXML 库)

c++ - 变量 'fname' 周围的堆栈已损坏

c++ - 自动释放由外部 api 分配的对象

访问堆对象与堆栈对象的 C++ 性能

c++ - 在许多 malloc/free 小块内存之后 malloc 大块内存失败

c++ - 从基类函数调用派生类函数

c - 渐进式内存分配策略

C++ 运行时错误 : free(): invalid next size (fast)

您可以将堆栈分配的值放入堆分配的数组中吗

c++ - 为什么动态分配的内存需要类型转换?