繁体   English   中英

指向std :: vector的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM