2017-03-25 2 views
0

私はこれを行うための他の方法があることを知っています。しかし、私はこれを実験することにしました:なぜ私は&unique_ptrにnewで作成されたクライアントオブジェクトを割り当てることができません

unique_ptr<int> pi; 
    pi = std::move(new int); 

このコードをコンパイルすると、コンパイラはエラーを出します。どうして?

+2

さて、エラーは何ですか?そして、なぜあなたは 'std :: move'をポインターにしていますか? –

答えて

3

unique_ptrには、「operator=」の「未使用ポインタの割り当て」機能がありません。
これは、間違いを避けるために(おそらく)です。

(ちなみに、あなたのstd::moveは何もしません。)

あなたはコンストラクタを使用することができます

std::unique_ptr<int> pi(new int); 

またはstd::make_unique

auto pi = std::make_unique<int>(); 

または、後で割り当てるために、reset()を:

std::unique_ptr<int> pi; 
pi.reset(new int); 
関連する問題