目前工作在我的DirectX的遊戲,用memset(0)(或VS ZeroMemory宏,如果你願意的話)在不斷的緩衝構造函數初始化用零所有值和它工作得很好。當我不小心嘗試用這種方法初始化其他包含矢量的工具時,就會出現問題。根據編譯器(VS2010/VS2012),這導致「向量迭代器不兼容」,std :: vector :: end更加精確。我可以理解,memset可能會使矢量迭代器失效,但爲什麼在將元素推回到矢量後,「end」迭代器無法正常工作。它不應該重新定位向量結束迭代器到正確的位置(在最後一個元素之後)嗎?是否所有類型的std :: some_container :: end迭代器都受此影響?memset的原因「矢量迭代器不兼容」的錯誤
#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
}
}
只是...不要...使用... memset。它...只是工作... – 2013-02-25 13:24:21
那麼不要使用'memset'問題解決。這不是火箭科學。 – 2013-02-25 13:24:27
你究竟想要在構造函數中對'* this'做一個memset?這是可怕的。 – 2013-02-25 13:24:30