c++ - 堆栈 VS 堆与类

标签 c++ heap-memory stack-memory

假设您有一个带有一些存储数据结构(列表、 vector 、队列等)的简单类

class MyClass
{
public:
    std::list<OtherClass*> m_myList;
};

现在假设我们在堆上分配这个类。

MyClass* pClass = new MyClass();

现在当我们向这个列表中添加更多项时,它们是在堆上还是在堆栈上? 示例:

OtherClass* pOtherClass = new OtherClass();
pClass->m_myList.push_front(pOtherClass);

感谢您的帮助!

最佳答案

标准集合类使用 Allocator 类为存储的项目分配内存。默认分配器将在空闲存储上分配数据。如果你愿意,你可以提供自己的,我想如果你非常想要,你可以让它在堆栈上分配空间,但你必须做大量的额外工作才能实现这一点。

请注意,您不必必须在自由存储上分配对象本身来实现这一点。事实上,您的 MyClass *pClass = new MyClass(); 通常不是一个好主意。您通常只想使用 MyClass Class; 并完成它。这将在堆栈上为集合对象本身(通常很小)分配空间,但它存储的空间通常仍将来自空闲存储(同样,通过分配器)。除其他外,这有助于自动化内存管理——当集合对象超出范围时,它将被销毁。它的析构函数将销毁它包含的对象并释放内存(全部自动)。

关于c++ - 堆栈 VS 堆与类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814979/

相关文章:

c++ - 为什么在没有明显代码的情况下删除对象?

c++ - C++14 中的多平台跨线程通信

java - Websphere 上传 EAR 文件,堆问题

c - 为什么要在堆上而不是栈上分配内存?

c - 在C中使用strcpy(),堆栈和堆之间的区别?

c++ - 分配的内存在栈或堆中

c++ - boost python optional 引发错误

C++11:参数包扩展计数器

java - VisualVM:理想的堆内存使用图

java - Java多线程—如果我们有共享堆,为什么我们需要查看主内存(RAM)?