指向std :: vector的指针

时间:2013-03-12 18:42:43

标签: c++ vector std

所以这就是我遇到的问题。

我有一个指向std :: vector的指针。因此,在初始化指针后,我不会向向量添加任何项目,也不会删除任何项目。但是,在我的代码中的某个点,我的std :: vector移动位置,我最终得到一个悬空指针。这似乎是随机发生的,即使我在制作指针

之后从未触摸过矢量

我花了一段时间调试这个问题,以解决这个问题。有没有办法保证我的std :: vector不会改变内存位置?或者指向一个向量是一个坏主意。

2 个答案:

答案 0 :(得分:1)

  

或者指向一个向量是一个坏主意吗?

一般来说,我会说拥有用于控制对象生命周期的原始指针是一个坏主意。不要使用原始指针和自动内存管理,尝试使用具有适当所有权语义的智能指针(std::shared_ptr<>std::unique_ptr<>)。仅使用原始指针来观察指针(如果您希望能够在运行时验证它们是否悬空,请使用weak_ptr<>)。

此外,在许多情况下,您可能会发现根本不需要指针。在这种情况下,只需使用具有自动存储的对象,由于移动语义,可以在C ++ 11中有效地移动或传递/返回值。

答案 1 :(得分:1)

  

这似乎是随机发生的

不,它没有。只要它保持在范围内,它就具有相同的地址。可能发生的事情是向量超出范围,并且由于它是自动分配的(听起来像),它在那时被摧毁。你可以做的是在堆上分配向量(例如int s):

std::vector<int>* pv = new std::vector<int>();

然后你不会有这个问题。但是,您必须记住使用

明确delete
delete vp;

pv超出范围之前,或者你会发生内存泄漏。