内存将在下面的代码中分配到哪里?

时间:2013-07-29 10:26:33

标签: c++ memory-management dynamic-allocation static-allocation

如果我声明std::vector<A *>,内存将被分配到哪里?我知道new动态分配内存,但应该静态分配向量的内存。我想知道记忆会发生什么。

    typedef std::vector<A *> AArray;

    void myFunction()
    {
        AArray aarray;
        aarray.push_back(new A());
        aarray.push_back(new A());
    }

3 个答案:

答案 0 :(得分:2)

std::vector需要能够更改它的已分配数据,这意味着它将在内部保留已分配的数组(本例中为(A *)[])。这个数组将在堆上分配(动态)。

答案 1 :(得分:0)

AArray aarray;将为您的向量分配堆栈内存。

aarray.push_back(new A());将在堆上构造一个A,然后返回一个指针,将其放置在容器中。

答案 2 :(得分:0)

每次调用myFunction()时都会导致内存泄漏。变量aarraymyFunction()的本地变量,并且是静态分配的,因此一旦控制从函数返回就会被销毁。但是,类A的两个对象是动态创建的,并且不会被C ++自动销毁。您必须使用delete删除这些对象。您尚未删除代码中的对象,因此这两个对象将在内存中保持未引用状态,从而导致内存泄漏。