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)
正如我自己测试的那样,第一种情况似乎是安全的,而第二种情况则不然,但我不能确定.
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调整自身大小时 - 例如,当你将元素推送到它时.