c++ - 在内存中存储对象的正确决策(复合模式)

标签 c++ design-patterns memory-management

我已经在 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/

相关文章:

你能向我解释一下两个程序之间的区别吗?

c++ - 不退出以 cin 为条件的 while 循环 c++

c++ - vector<unique_ptr<X>> v 出错

c++ - 浮点矩阵上的指针被视为 *uchar

memory-management - 什么时候最适合内存分配有用

c++ - 检查内存是否在堆上?

c++ - v.end() 指向哪里?

java - 对 API 调用进行分组,以便 UI 可以干净地调用它们并获得响应 - 设计

design-patterns - 使用 RX 通过中介在两个组件之间进行通信

c# - 需要从装饰器设计模式中的组件派生装饰器