sayHello()
というメソッドを持つFoobar
クラスがあり、 "Well hello there!"と出力されます。私は次のコード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]
がnullにならないようにする必要がありますか? myFoo2
はなぜ機能しますか?私は最初の移動を行うとき
class Foobar
{
public:
Foobar(void) {};
virtual ~Foobar(void) {};
void sayHello() const {
cout << "Well hello there!" << endl;
};
};
ああ、ほら!それは突然多くの意味があります。ベクトルは依然としてサイズ1と言いますが、今は 'nullptr'へのunique_ptrであり、私が望んでいるようにベクトルが範囲外になったときにクリーンアップされます。あなたが指摘したように私のコンパイラは私のことをちょうどやっているだけです。ありがとう! –
データメンバーを 'Foobar'に追加し、' sayHello() 'にアクセスしました。 'myFoo2'を使用しようとすると、コードがクラッシュします。 –