迭代解引用向量安全吗?
Is it safe to iterate a dereferenced vector?
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>* v = new std::vector<int>;
v->push_back(1);
for (int val : *v) {
}
上面的代码是完美的,但是你所展示的代码并没有表明someVector
是否被初始化或者是否可能被反初始化。
问题实际上是指针是否有效。如果你知道指针是有效的,那么对它解引用是可以的,不管它是vector、list、map还是整型。
std::vector<int>* v = new std::vector<int>;
v->push_back(1);
delete v;
for (int val : *v) {
}
代码将编译并可能运行,但它所做的完全是未定义行为。
在上面的例子中,像这样迭代一个向量安全吗?
不,不是。
在进入循环之前,显然应该检查至少
someVector != nullptr
,并确保在声明后正确初始化。
或者直接初始化指针。
std::vector<int>* someVector = new std::vector<int>();
更好的问题是,为什么在那里使用std::vector<int>*
指针?
相关文章:
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- std::vector::clear()ing 二维向量线程的内部向量安全吗?
- 在移出向量上调用 size() 方法是否安全?
- 我可以在中断中写入向量,然后以安全的方式仅在主线程内读取吗?
- 是一个std ::向量线程,我的目的是安全的
- C++向量的分配 双 = 安全?
- 制作安全的读取器/写入器向量
- 将线程的结果转储到向量中是线程安全的吗
- C++以内存安全的方式使用给定向量的大小创建2D阵列
- 当需要数组时,将指针传递到向量中的第一个元素是否安全
- 将memcpy与Eigen类型的向量一起使用安全吗
- 在C++中动态分配向量的安全方法是什么
- 向量::插入的异常安全保证是什么?
- C++ STL 向量迭代器与索引访问和线程安全
- 如何在 C++11 中的函数内初始化线程安全静态常量向量
- 从同一向量push_back元素是否安全
- 将两个 std::vector<cv::P oint> 向量和安全公共点与第三个 std::vector<cv::P oint 进行比较>
- 用new创建向量安全吗
- C++线程安全向量.erase
- 线程安全向量