如果我声明 a std::vector<A *>
,内存将分配到哪里?我知道new
动态分配内存,但向量的内存应该静态分配。我想知道内存会发生什么。
typedef std::vector<A *> AArray;
void myFunction()
{
AArray aarray;
aarray.push_back(new A());
aarray.push_back(new A());
}
如果我声明 a std::vector<A *>
,内存将分配到哪里?我知道new
动态分配内存,但向量的内存应该静态分配。我想知道内存会发生什么。
typedef std::vector<A *> AArray;
void myFunction()
{
AArray aarray;
aarray.push_back(new A());
aarray.push_back(new A());
}
Astd::vector
需要能够更改其分配的数据,这意味着它将在内部保留分配的数组(在这种情况下为 (A*)[])。该数组将在堆上(动态)分配。
AArray aarray;
将为您的向量在堆栈上分配内存。
aarray.push_back(new A());
将A
在堆上构造一个,然后返回一个指向它的指针,该指针将放置在您的容器中。
每次myFunction()
调用都会导致内存泄漏。该变量aarray
是本地的myFunction()
并且是静态分配的,因此一旦控制从函数返回,它就会被销毁。但是,类的两个对象A
是动态创建的,不会被 C++ 自动销毁。你必须使用delete
来删除这些对象。您没有删除代码中的对象,因此这两个对象将在内存中保持未引用状态,从而导致内存泄漏。