0

我有一个指向对象的指针向量:

vector<Foo*> bar;

在一个方法中,我得到了一个 Foo 对象,需要将它添加到向量中。这是我目前的尝试:

void push(const Foo &a){
bar.insert(bar.begin(), a);
}

我知道这不起作用,因为a作为参考传递,但我似乎无法获得a要添加到的指针bar

如何添加a到向量中bar

4

4 回答 4

4

您不能将对象放入指针容器中。

如果要放入对象,则需要一个对象容器:

vector<Foo> bar;

在这种情况下,所有对象必须属于同一类型;如果Foo实际上是一个基类,并且您想要存储各种不同的派生类型,那么您将需要存储指针。

如果你想要一个指针容器,那么你需要在其中放置一个指针:

bar.insert(bar.begin(), &a);

在这种情况下,您需要注意对象的生命周期,并确保在对象被销毁后不使用指针。智能指针可能会有所帮助。

于 2012-10-02T04:09:44.613 回答
1

添加的地址a。指针存储地址,这就是它们指向某物的方式。

bar.insert(bar.begin(), &a);

我假设您有充分的理由使用指针,但请确保a传入的不是临时的,并且您传入的对象比向量的寿命长,这样您就不会得到一个悬空指针。

于 2012-10-02T04:06:21.793 回答
0

如果我错了,请纠正我,但a不是该代码中的指针,即使它是通过引用传递的。您应该能够在其上使用 & 来获取它的地址,对吗?

于 2012-10-02T04:06:31.397 回答
0

取地址即可a。引用实际上就是一个引用,因此获取它的地址实际上会产生它所引用的地址。

void push(const Foo& a)
{
    bar.insert(bar.begin(), &(a));
}
于 2012-10-02T04:08:49.380 回答