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

Where will the memory be allocated in the following piece of code?

本文关键字:分配 内存 代码 在下面      更新时间:2023-10-16

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

    typedef std::vector<A *> AArray;
    void myFunction()
    {
        AArray aarray;
        aarray.push_back(new A());
        aarray.push_back(new A());
    }

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

AArray aarray;将在堆栈上为向量分配内存。

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

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