比较std :: vector的指针以检查相等性是否安全?

Ala*_*aya 5 c++ pointers vector c++11

在同一时间,我创建了一个指针指向std::vector,然后我做了一些push_back,reserve,resize操作与向量,这样的操作之后,是安全的指针比较的是向量的地址,以检查是否指针指向该向量,因为可能会有一些内存重新分配.

例如

std::vector<int> vec;
vector<int>* pVec = &vec;
vec.reserve(10000);
assert(pVec == &vec);
vec = anotherVec;
assert(pVec == &vec);
Run Code Online (Sandbox Code Playgroud)

更重要的是,将指针与向量的第一个值进行比较是否安全?例如:

std::vector<int> vec(1,0);
int* p = &vec[0];
// some operation here
assert(p == &vec[0]);
Run Code Online (Sandbox Code Playgroud)

正如我自己测试的那样,第一种情况似乎是安全的,而第二种情况则不然,但我不能确定.

R S*_*ahu 7

std::vector<int> vec;
vector<int>* pVec = &vec;
vec.reserve(10000);
assert(pVec == &vec);
Run Code Online (Sandbox Code Playgroud)

是安全的.


std::vector<int> vec(1,0);
int* p = &vec[0];
// some operation here
assert(p == &vec[0]);
Run Code Online (Sandbox Code Playgroud)

不安全


第一个块是安全的,因为vec即使内容发生变化,地址也不会改变.

第二个块不安全,因为地址vec[0] 可能会改变; 例如,当vec调整自身大小时 - 例如,当你将元素推送到它时.