C++ 迭代解引用向量安全吗?

C++ 迭代解引用向量安全吗?,c++,c++11,C++,C++11,在上面的例子中,这样迭代向量安全吗 在上面的例子中,这样迭代向量安全吗 不,不是 在进入循环之前,您显然应该至少检查一下 std::vector<int>* someVector; // Initialize vector here and add elements //**** // Now loop vector after initializing it for (int val : *someVector) { doSomething(val); } 并确保声

在上面的例子中,这样迭代向量安全吗

在上面的例子中,这样迭代向量安全吗

不,不是

在进入循环之前,您显然应该至少检查一下

std::vector<int>* someVector;
// Initialize vector here and add elements
//****
// Now loop vector after initializing it
for (int val : *someVector)
 {
     doSomething(val);
 }
并确保声明后已正确初始化

或者最好直接初始化指针

someVector != nullptr

更好的问题是,为什么在那里使用std::vector*指针?

这里的问题不是取消引用

std::vector<int>* someVector = new std::vector<int>();
代码将编译并可能运行,但它所做的是完全未定义的行为


安全吗:没有保证。

你这样说是什么意思?在给定的代码中,someVector从未初始化,因此取消引用它是未定义的行为。你的意思是“初始化向量”包括使指针实际指向一个向量有效吗?我猜OP是想问,在迭代发生时,是否可以重新分配某个向量,以及它对迭代有什么影响。我看到Initialize vector已经被注释掉了,所以可能有一段初始化代码正确地将someVector设置为指向适当的向量。@Sam在开始胡乱猜测之前,让我们诚实一点。问题还不清楚,OP也没有提供答案。投票结束。无害的胡乱猜测没有错,只要它们被正确地否认。@Sam我不是说你的猜测错了,但OP是关于他们的问题。这个问题的答案同样很难确定,但很可能是受虐狂。
std::vector<int>* v = new std::vector<int>;
v->push_back(1);
for (int val : *v) {
}
std::vector<int>* v = new std::vector<int>;
v->push_back(1);
delete v;
for (int val : *v) {
}