실제로 여기에 질문을 게시하는 것은 이번이 처음입니다! 단일 링크 된 목록에 대한 복사 생성자를 만드는 데 문제가있었습니다. 나는이 사이트와 다른 여러 사이트에서 비교할만한 예제를 찾기 위해 높거나 낮게 검색했습니다. 스마트 포인터를 사용하려고 시도했지만 지금까지는 unique_ptr(s)
만 사용했습니다. 이 함수는 전달 된 링크 된 목록의 전체 복사본을 만들기위한 것입니다. 나는 지금까지 다음과 같은 시도를했지만 단지 세그 폴트를 얻는다. 몇 가지 테스트를 실행했으며 내 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);
}
}
업데이트 # 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