링크 목록의 개념을 사용하여 List 클래스를 만들려고합니다. 원래 C++ 표준 new
키워드를 사용하는 동안 C++ 11 std::shared_ptr
에 대한 전환을 결정했습니다. . 그러나 스마트 포인터를 사용할 때 충돌이 발생할 때 제대로 작동하지 못합니다.C++ 설정 포인터 shared_ptr과 동일
class List
{
public:
void push_back(...) {
Node *temp = new Node;
...
if (!head) {
head = temp;
return;
}
else {
Node *last = head;
...
last->next = temp;
}
}
...
private:
Node *head = nullptr;
};
그리고 여기가 변화의 모습입니다 : 여기에 코드의 일부 비트는 변경 전에있는 문제가 head
및 last
가 동적으로 할당되지 않습니다 수 있습니다처럼
class List
{
public:
void push_back(...) {
std::shared_ptr<Node> temp(new Node);
...
if (!head) {
head = temp.get();
return;
}
else {
Node *last = head;
...
last->next = temp.get();
}
}
...
private:
Node *head = nullptr; // don't need this to be a smart ptr
};
내 기분이 그리고 아마도 그들은 shared_ptr
으로 일해야 할 필요가 있을지 모르겠지만 확실하지 않습니다. 정확하게 내가 뭘 잘못하고 어떻게 해결할 수 있습니까? 내 문제를 해결할 수있는 것을 찾을 수 없기 때문에 이것이 중복되지 않기를 바란다. 감사.
편집 : 다음은 Node
구조체의 :
struct Node{
int data;
Node* next;
};
, 내가 문제가 가능성이 Node' '의 정의는 추측에는 요 – Assimilater
그럼 내가 동적으로 할당하거나 다른 프로그램이 작동하지 않습니다'temp' 노드를 필요 것 같아, 난 그냥했다 표준'new'가 아닌'shared_ptr'을 동적으로 할당하는 것을 고려하십시오. 그리고 도움이된다면'Node' 구조체를 게시 할 수 있습니다. –
예,'Node' 구조체를 게시하십시오. – Assimilater