2016-12-30 6 views
-2

スマートポインタに基づいて自分のリストを作成したいと思います。 私のリストに値を追加できる関数が必要ですが、新しく作成されたオブジェクトを指す関数に渡されたオブジェクトの変数nextの値を変更する方法がわかりません。誰かがアイデアを持っていますか?スマートポインタの表示を変更する方法

#include <iostream> 
#include <memory> 

struct node 
{ 
    int value; 
    std::unique_ptr<node> next; 

    node() { 
     value = 0; 
     next = nullptr; 
    } 
}; 

void add(std::unique_ptr<node> &w, int liczba) 
{ 
    std::unique_ptr<node> new_list_node{ new node }; 
} 

int main() 
{ 
    std::unique_ptr<node> list_node{ new node }; 
    add(list_node, 1); 
    return 0; 
} 

答えて

1

だけ割り当てる

void add(std::unique_ptr<node> &w, int liczba) 
{ 
    std::unique_ptr<node> new_list_node{ new node }; 
    w->next = std::move(new_list_node); 
} 

いっそ、C++ 14

void add(std::unique_ptr<node> &w, int liczba) 
{ 
    w->next = std::make_unique<node>(); 
} 
あなたはちょうどあなたが nextに右辺値を割り当てるのいずれかを確認してくださいまたはにlvlaueをキャストする必要があり

用参照値はstd::moveとなります

+0

「add」関数に毎回どのようにテールを渡すのですか? 1つのユニークなptrがオブジェクトを指すことができますか? –

+0

@PetarVelev - 彼は既にそうですが、**参照**を 'std :: unique_ptr'に渡します。 – StoryTeller

+0

しかし、彼はその参照を渡すことができるように尾を追跡しなければならない。 2番目の最後の要素が既にオブジェクトの一意の所有権を保持しているため、彼は尾に別の 'unique_ptr'を作成できませんか? –

関連する問題