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