這是使用的unique_ptr代碼:有人可以解釋這個unique_ptr代碼發生了什麼嗎?
struct Foo{
Foo(){std::cout << "Ctor called\n";}
~Foo(){std::cout << "Dtor called\n";}
void bar(){std::cout << "bar called\n";}
}
int main(){
unique_ptr<Foo> up(new Foo);
{
vector<unique_ptr<Foo>> v;
v.push_back(move(up));
}
up->bar();
return 0;
}
運行的輸出是:
Ctor called
Dtor called
bar called
我期待調用bar()
失敗,因爲據我瞭解,up
本來是要由於move
ing會被v
破壞。看起來我沒有正確理解。有人可以引導我瞭解發生的事情嗎? (g ++ 4.7.0)
未定義的行爲未定義爲顯示失敗。 – Pubby