2017-03-25 10 views
3

私はこのような機能を持っている...C++ 14 unique_ptrを、削除機能のunique_ptrをエラー使用「のstd ::ユニーク-PTR」を作る

unique_ptr<Node> test(unique_ptr<Node> &&node, string key) 
{ 
    if(!node) 
    { 
     return make_unique<Node>(key); 
    } 
    else 
     return node; 
} 

ノードがnullの場合、私はノードを作成したいです、またはノードを返すことができます。 "削除された関数 'std :: unique_ptr'の使用"というエラーが出ます。私は何を間違えたのですか?

+1

あなたは 'unique_ptr'をコピーすることはできません。それがエラーであなたに伝えようとしていることです。 'unique_ptr'だけでなく、コピーコンストラクタの名前に気づくでしょう。 – chris

+0

クリスおかげさま...私はそれを修正する必要がありますか? –

+0

コピーするのではなく、 'node'を*移動させたいかもしれません。 – DeiDei

答えて

3

問題は、あなたが関数を呼び出す方法です。しかしまず第一に、あなたのstd::unique_ptrを値で受け入れてください。r-参照ではありません。

次に、関数を呼び出したときにポインタをstd::move()する必要があります。

// accept by value 
std::unique_ptr<Node> test(std::unique_ptr<Node> node) 
{ 
    if(!node) 
     return std::make_unique<Node>(); 

    return node; 
} 

int main() 
{ 
    auto n = std::make_unique<Node>(); 

    n = test(std::move(n)); // move the pointer 
} 

std::unique_ptrは、それ以外の場合は、ユニークでなければなりません。コピーすることはできません。あなたはに移動し、を移動します。

+0

良い点は、値で受け入れることは本当に正しい解決です。 – chris

関連する問題