我遇到了這個「向量迭代器不兼容」斷言,我不知道爲什麼。我在這裏看到了幾個答案,但沒有一個幫助。我想知道是否有人能夠發現這個問題。它基本上是一個我深度複製的向量,但是當我遍歷副本時,它斷言。代碼是有點混亂,但我不能再親一個簡單的情況:向量迭代器在深度複製向量時不兼容
#include <vector>
class MyClass
{
public:
MyClass() {};
~MyClass() {};
virtual MyClass* Clone()
{
MyClass* clone = new MyClass(*this);
return clone;
}
int GetData() const { return m_data; }
private:
int m_data;
};
typedef std::vector<MyClass*> MyClassList;
struct MyStruct
{
MyClassList myClassList;
};
struct MyStruct2
{
MyStruct2() {};
MyStruct *pData2;
};
int _tmain(int argc, _TCHAR* argv[])
{
MyClassList* m_pMyClasssOrig;
m_pMyClasssOrig = new MyClassList();
m_pMyClasssOrig->push_back(new MyClass());
m_pMyClasssOrig->push_back(new MyClass());
m_pMyClasssOrig->push_back(new MyClass());
// Setup worker parameters
MyStruct2* pWorkerParam = new MyStruct2();
MyStruct* pData2 = new MyStruct();
memset(pWorkerParam, 0x00, sizeof(MyStruct2));
memset(pData2, 0x00, sizeof(MyStruct));
pWorkerParam->pData2 = pData2;
// Make deep copy of the myClassList
for (auto pMyClass : *m_pMyClasssOrig)
{
auto decoderCopy = pMyClass->Clone();
pWorkerParam->pData2->myClassList.push_back(decoderCopy);
}
// why do I get "Expression: vector iterators incompatible"
// here?
for (auto i = pWorkerParam->pData2->myClassList.begin(); i != pWorkerParam->pData2->myClassList.end(); i++)
{
MyClass* pMyClass = *i;
(void)pMyClass->GetData();
}
return 0;
}
請參閱[std :: memset']文檔(http://en.cppreference.com/w/cpp/string/byte/memset)。除非你的對象類型是[* trivially copyable *](http://en.cppreference.com/w/cpp/concept/TriviallyCopyable)(並且'MyStruct'是* not *,因爲它的'std :: vector <>'不是),您的代碼的結果行爲是未定義的。 – WhozCraig