[英]Pointer to std::vector
所以这就是我遇到的问题。
我有一个指向std :: vector的指针。 因此,在初始化指针后,我不会向向量添加任何项目,也不会删除任何项目。 但是,在我的代码中的某个点,我的std :: vector移动位置,我最终得到一个悬空指针。 这似乎是随机发生的,即使我在制作指针后从未触摸过矢量
我花了一段时间调试这个,以解决这个问题。 有没有办法保证我的std :: vector不会改变内存位置? 或者指向一个向量是一个坏主意。
或者指向一个向量是一个坏主意?
一般来说,我会说拥有用于控制对象生命周期的原始指针是一个坏主意。 不要使用原始指针和自动内存管理,尝试使用具有适当所有权语义的智能指针( std::shared_ptr<>
或std::unique_ptr<>
)。 仅使用原始指针来观察指针(如果您希望能够在运行时验证它们是否悬空,请使用weak_ptr<>
)。
此外,在许多情况下,您可能会发现根本不需要指针。 在这种情况下,只需使用具有自动存储的对象,由于移动语义,可以在C ++ 11中有效地移动或传递/返回值。
这似乎是随机发生的
不,它没有。 只要它保持在范围内,它就具有相同的地址。 可能发生的事情是向量超出范围,并且由于它是自动分配的(听起来像),它在那时被摧毁。 你可以做的是在堆上分配向量(例如int
s):
std::vector<int>* pv = new std::vector<int>();
那你就不会有这个问题。 但是你必须记得用它明确地delete
它
delete vp;
在pv
超出范围之前或者你会得到内存泄漏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.