我已经在 Main.cpp 中有 CCompositePrimitive 类的对象
int main()
{
...
CCompositePrimitive DrawObjects;
...
}
CCompositePrimitive 类有字段:
private:
list<CDrawObject*> m_Objects;
和方法:
public:
Add(...);
void CCompositePrimitive::Add() {
Objects.push_back(new Rectangle(...))
}
在某些论坛上问我 DrawObjects
对象将存储在堆中。但我不这么认为。在我看来,DrawObjects
对象将存储在堆栈中。
如果 DrawObjects 可以存储在列表 m_Objects 中,我如何保留计算机的堆栈溢出内存(任何不同的内存问题);非常多的对象,也可以包含 CCompositePrimitive 对象(复合模式)。
最佳答案
取决于类在哪里CCompositePrimitive m_DrawOjects;
存储在 gets created 中。 (我假设它存储在一个类中,因为 m_
)
如果你的类是在堆栈上创建的,那么 m_DrawObjects
也会。如果您的类是在堆上创建的,那么将是 m_DrawObjects
.
却无所谓m_DrawObjects
在堆或栈上创建,list<CDrawObject*> m_Objects;
里面的对象将在堆上创建,因为这就是链表的工作方式。
编辑:根据您的编辑和评论,然后DrawObjects
当然是在堆栈上创建的。 :) 但我所说的关于列表中的对象的内容仍然适用。
关于c++ - 在内存中存储对象的正确决策(复合模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942965/