我有一個Foobar
類與sayHello()
方法輸出「那麼你好!」。如果我寫了下面的代碼移動STL容器中的元素是否將其從該容器中移除?
vector<unique_ptr<Foobar>> fooList;
fooList.emplace_back(new Foobar());
unique_ptr<Foobar> myFoo = move(fooList[0]);
unique_ptr<Foobar> myFoo2 = move(fooList[0]);
myFoo->sayHello();
myFoo2->sayHello();
cout << "vector size: " << fooList.size() << endl;
輸出是:
Well hello there!
Well hello there!
vector size: 1
我很困惑,爲什麼這個工程。當我第一步行動時不應該fooList[0]
變爲空?爲什麼myFoo2
工作?
這裏是Foobar
樣子:
class Foobar
{
public:
Foobar(void) {};
virtual ~Foobar(void) {};
void sayHello() const {
cout << "Well hello there!" << endl;
};
};
啊,哈!這突然變得很有意義。該向量仍然表示大小爲1,但它現在只是一個'nullptr'的unique_ptr,並且在向量超出範圍時會得到清理,就像我希望的那樣。看起來像所有事情都按照我的預期工作,正如你指出的那樣,我的編譯器只是在對我玩技巧。謝謝! –
我向'Foobar'添加了一個數據成員,並在'sayHello()'中訪問它。現在,當我嘗試使用'myFoo2'時,代碼會崩潰。 –