ここに質問を投稿するのは初めてです!私は、単一リンクリストのコピーコンストラクタを作成する際にいくつかの問題を抱えていました。私は、これと他のさまざまなサイトで比較可能な例を探し求めています。私はスマートポインタを使用しようとしていましたが、これまではunique_ptr(s)
しか使用していませんでした。この関数は、渡されているリンクリストの詳細コピーを作成するためのものです。私はこれまでのところ以下のことを試しましたが、私はsegfaultしか取得しません。私はいくつかのテストを実行したと私はinsert_front()
とinsert_back()
の機能が正常に動作していると私は信じています。私は頭と尾の両方へのポインタを持っています。以下は私が試したコードです。スマートポインタを利用した単一リンクリストのコピーコンストラクタの実装方法
Deque::Deque(const Deque& deque2copy){
this -> head = 0;
unique_ptr<Node> temp = make_unique<Node>(deque2copy.head -> val, move(deque2copy.head->next));
while(temp != 0){
this ->insert_back(temp->val);
temp = move(temp-> next);
}
}
UPDATE#1
Deque::Deque(const Deque& deque2copy){
if(deque2copy.head->next == nullptr){
return;
} else {
this -> head = 0;
unique_ptr<Node> temp = make_unique<Node>(*deque2copy.head->next);
while(temp != 0){
this ->insert_back(temp->val);
temp = move(temp-> next);
}
}
}
なぜコピーしているコンテナから移動していますか?これは 'auto_ptr'の直感的ではありません。 – krzaq
は' move() 'なしでコンパイルされたようです。 'unique_ptr'のコピーを許可する必要があると思いましたか? – Shrayan
移動すると移動できます。あなたが動くと、もはやオリジナルを手に入れません。私はあなたが 'make_uniqueを望んでいたと思うかもしれないと思うかもしれません。 – krzaq