2
私はユニークなポインタのxvalue引数の理解を明確にしたいユニークなポインタxvalueセマンティクス?ラムダf2の動作がラムダf1と異なるのはなぜですか?
これは私がstd :: moveとuniqueポインタを学ぶために書いたコード例です。誰もline2がクラッシュする理由を説明することはできますが、line1は動作しますか?私のテストプログラムでlambda f2を動かすと、なぜ、std :: moveの後でも、line1は動作しますか?これはちょうど私の学習のためであるとstd ::移動はr値の参照にちょうどキャストであるので、ない宿題の問題は、私は1つの作品C++ 14とC++ 11
#include <iostream>
#include <functional>
#include <memory>
void test()
{
std::unique_ptr<int> p (new int(278));
auto f1 = [](std::unique_ptr<int> i){std::cout << *i << std::endl;};
auto f2 = [](std::unique_ptr<int> &&i){std::cout << *i << std::endl;};
f2(std::move(p));
std::cout << *p << std::endl; //line 1
f1(std::move(p));
std::cout << *p << std::endl; //line 2
}
int main(int argc, const char * argv[]) {
test();
return 0;
}
編集を追加しましたが、ヘッダを追加しなかったためコンパイルできませんでした –
Xcodeバージョン7.2からコード全体を貼り付けています。はい、申し訳ありませんが、それはタイプミスです。私は非常に残念です –
Apple LLVM 7.0、私はendlの誤植を修正しました。キャッチをありがとう –