class Example
{
public: int i;
Example(const Example &e)
{
i = e.i;
}
Example(int i)
{
this->i = i;
}
};
int main()
{
std::vector<Example*> vec;
std::vector<Example*> newVec;
Example* ex1 = new Example(1);
Example* ex2 = new Example(2);
vec.push_back(ex1);
vec.push_back(ex2);
//newVec = vec; --> This does shallow copy
for(int i=0; i<vec.size(); ++i) // --> Deep copy
{
Example newE(*(vec[i]));
newVec.push_back(&newE);
}
for(int i=0; i<newVec.size(); ++i)
{
std::cout << "\nfoobar" << newVec[i]->i << "\n";
}
}
上面的代碼打印兩次foobar2。它不應該打印foobar1和foobar2?另外,這是複製包含對象的矢量的最佳方法嗎?我想深入複製。向量中的push_back是否在同一位置插入?
'newVec.push_back(&newE);'將指針推到一個局部變量,立即超出範圍使其成爲一個懸掛指針 – VTT
...所以從那一刻起,任何事情都可能發生,訪問該指針可以返回隨機的東西, – spectras
你的向量不包含對象,它們包含指針,使用帶有對象的向量以獲得更舒適的生活 – molbdnilo