0

所以这是我遇到的问题。

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

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

4

2 回答 2

1

或者有一个指向向量的指针只是一个坏主意?

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

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

于 2013-03-12T18:46:56.140 回答
1

这似乎是随机发生的

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

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

那么你就不会有这个问题了。但是,您必须记住delete使用

delete vp;

beforepv超出范围,否则您将遇到内存泄漏。

于 2013-03-12T18:47:27.367 回答