目前正在处理我的 DirectX 游戏,并在常量缓冲区构造函数中使用 memset(0)(或 VS 中的 ZeroMemory 宏)来用零初始化所有值,它工作得很好。当我不小心尝试以这种方式初始化包含向量的其他一些结构时,就会出现问题。根据编译器(VS2010/VS2012),这会导致“向量迭代器不兼容”,std::vector::end 更精确。我可以理解 memset 可能会使向量迭代器无效,但是为什么在我将元素推回向量后“结束”迭代器无法正常工作。它不应该重新定位向量结束迭代器到正确的位置(在最后一个元素之后)吗?是否所有类型的 std::some_container::end 迭代器也受此影响?
#include <vector>
class MyClass
{
public:
MyClass() {
memset(this, 0, sizeof(*this));
}
~MyClass() {}
std::vector<int>& GetData() { return m_data; }
float m_range;
private:
std::vector<int> m_data;
};
int main()
{
MyClass myClass;
myClass.GetData().push_back(1);
myClass.GetData().push_back(2);
for (auto it = myClass.GetData().begin(); it != myClass.GetData().end(); it++)
{
//stuff
}
}