这是C++ : Coverity reports leaks for peculiar use of references and containers
的后续行动问题:*b
是在堆上分配的(new B()
)但是a_vector
和它的元素存储在哪里?将新元素推入a_vector
时会发生什么?
int main()
{
...
B* b = new B();
A a;
b->add_a_to_b( a );
...
delete (b);
}
class B {
public:
std::vector<A> a_vector;
void add_a_to_b( const A& a )
{
a_vector.push_back( a );
}
答案 0 :(得分:3)
a_vector
是类B
的成员,因此,在创建new B
时,内存会与B
的其余部分一起分配(也就是您所描述的& #34;在堆上#34;)。
当向元素添加元素时,向量的成员函数(如push_back()
会根据需要使用向量的分配器。分配器的执行方式/位置取决于分配器。< / p>