我有一个指向对象的指针向量:
vector<Foo*> bar;
在一个方法中,我得到了一个 Foo 对象,需要将它添加到向量中。这是我目前的尝试:
void push(const Foo &a){
bar.insert(bar.begin(), a);
}
我知道这不起作用,因为a
作为参考传递,但我似乎无法获得a
要添加到的指针bar
。
如何添加a
到向量中bar
?
我有一个指向对象的指针向量:
vector<Foo*> bar;
在一个方法中,我得到了一个 Foo 对象,需要将它添加到向量中。这是我目前的尝试:
void push(const Foo &a){
bar.insert(bar.begin(), a);
}
我知道这不起作用,因为a
作为参考传递,但我似乎无法获得a
要添加到的指针bar
。
如何添加a
到向量中bar
?
您不能将对象放入指针容器中。
如果要放入对象,则需要一个对象容器:
vector<Foo> bar;
在这种情况下,所有对象必须属于同一类型;如果Foo
实际上是一个基类,并且您想要存储各种不同的派生类型,那么您将需要存储指针。
如果你想要一个指针容器,那么你需要在其中放置一个指针:
bar.insert(bar.begin(), &a);
在这种情况下,您需要注意对象的生命周期,并确保在对象被销毁后不使用指针。智能指针可能会有所帮助。
添加的地址a
。指针存储地址,这就是它们指向某物的方式。
bar.insert(bar.begin(), &a);
我假设您有充分的理由使用指针,但请确保a
传入的不是临时的,并且您传入的对象比向量的寿命长,这样您就不会得到一个悬空指针。
如果我错了,请纠正我,但a
不是该代码中的指针,即使它是通过引用传递的。您应该能够在其上使用 & 来获取它的地址,对吗?
取地址即可a
。引用实际上就是一个引用,因此获取它的地址实际上会产生它所引用的地址。
void push(const Foo& a)
{
bar.insert(bar.begin(), &(a));
}