Я пытаюсь создать класс List, используя концепцию связанных списков, и, хотя я изначально использовал ключевое слово C++ standard new
, я решил отключить его для C++ 11 std::shared_ptr
, Тем не менее, я не могу заставить программу функционировать должным образом при использовании интеллектуальных указателей, так как она сбой. Вот некоторые фрагменты кода до изменения:C++ Устанавливающий указатель Equal to 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;
};
А вот как это выглядит с изменением:
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
};
Я чувствую, что проблема может быть, что head
и last
не выделяется динамически и, возможно, им нужно работать с shared_ptr
, но я не уверен. Что именно я делаю неправильно и как я могу это исправить? Я действительно надеюсь, что это не дубликат, потому что я не могу найти ничего, что решает мою проблему. Благодарю.
Edit: Вот Node
структура:
struct Node{
int data;
Node* next;
};
На первый взгляд, я думаю, проблема, вероятно, в определении 'Node' – Assimilater
Ну, похоже, мне нужен динамический узел' temp', иначе программа не работает, и я был просто учитывая динамическое распределение его с помощью 'shared_ptr', а не стандартного' нового'. И я могу опубликовать структуру «Node», если это поможет. –
да, сообщение 'Node' struct :) – Assimilater