1

我正在使用向量来保存指向类的指针。

class fooContainer{
private:
    vector <Foo *> foos;
public:
    void processFoo(int fooIndex);
};

我面临的问题是pop_back()删除元素,我只想将它从向量中删除,但不触摸有问题的对象。我还需要从向量中删除所有元素,以准备重新启动主循环(但保持相同的向量,这是一个类属性)。

我需要一个具有动态大小但不复制或删除其元素的结构,内容是保存指向它们的指针。

有没有更好的替代结构,还是我使用它们都错了?

4

4 回答 4

4

Vector 确实复制并销毁其内容,但在您的情况下,内容是指向对象而不是对象的指针。
指向对象的特定指针将被销毁,但指向该对象的其他指针以及对象本身不会被销毁。

于 2012-09-24T12:26:50.977 回答
1

你所拥有的正是这样做的。向量中指向的对象元素不会被销毁,除非您明确指出delete它们。

或者,如果您想在多个共享所有权的地方使用相同的指针,我建议使用std::shared_ptr.

于 2012-09-24T12:23:31.403 回答
0

pop不会“删除”元素,它只是将其从向量中删除。由于您的向量包含指针,因此您有责任适当地删除它们。

Vector 完全符合您的要求。

要删除元素,只需调用vector.clear()

于 2012-09-24T12:24:13.410 回答
-1

如果您只想从向量中获取指针的副本,则可以使用Foo* pfoo = v[0]at(index)用于检查访问的功能。

您还想清除所有指针,您可以遍历它们并将它们全部删除并调用v.clear()以删除所有元素。

如果您想要一个已经为您正确删除指针的向量,请使用boost::vector_ptr

于 2012-09-24T12:24:29.733 回答