英特尔检查器 XE 2012 警告 #12367 - 将迭代器参数切片传递给 vector::erase()
Intel Inspector XE 2012 warning #12367 - slicing of iterator parameter passed to vector::erase()
我收到警告#12367 when running Build | Build Solution for Intel Static Analysis
,但我看不到我的代码有问题。有人的想法吗?
警告 #12367:由于隐式类型转换,在调用"std::_Vector_iterator>> std::vector>::erase(std::_Vector_const_iterator>>)"中作为实际参数 2 传递的对象切片
pragma warning(suppress: 4995)
#include <vector>
class __declspec(dllexport) MxPluginLib //nothing special here, not derived class etc
{
public:
// ...
private:
// ... nothing special here
};
class __declspec(dllexport) MxPluginManager
{
public:
//...
private:
#pragma warning(suppress: 4251)
std::vector<MxPluginLib *> _Libs;
};
bool MxPluginManager::DeleteNextUnselected()
{
bool erased = false;
size_t cnt = _Libs.size();
if (cnt > 0 )
{
for (size_t x = 0; x < cnt; x++)
{
if (_Libs[x]->GetSelection() == false)
{
delete _Libs[x];
_Libs[x] = ' ';
_Libs.erase(_Libs.begin()+x); //THIS IS WHERE THE WARNING IS GENERATED
erased = true;
break;
}
}
}
return erased;
}
在我看来,唯一奇怪的线是
_Libs[x] = ' ';
这可能会使分析器认为您正在存储字符而不是指针。由于您无论如何都要擦除该元素,因此您并不真正需要它 - 删除它,看看它是否解决了您的问题。
此行
_Libs.erase(_Libs.begin()+x);
将vector::iterator
传递给期望vector::const_iterator
的函数。这是可以的,并且需要工作(但标准并没有确切说明它是如何工作的,只是iterator
可以转换为const_iterator
)。
在您的实现中,似乎iterator
是从const_iterator
派生的,传递参数将通过"切片"派生部分将其转换为基类。
错误,可以忽略警告。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- std::vector的包装器,使数组的结构看起来像结构的数组
- 为什么(-1)%vector::size()总是返回0
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- 将 int 数组转换为 std::vector<int*>
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 从 std::vector<无符号字符>切片中提取 int?
- 使用虚拟变量对 std::vector 内部循环进行切片的最佳方法
- 英特尔检查器 XE 2012 警告 #12367 - 将迭代器参数切片传递给 vector::erase()
- 如何根据“std::set”中的元素对“std::vector”进行切片
- c++防止std::vector中的对象切片