リンクリストの概念を使って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;
};
そして、ここではそれを変更して次のようになります。
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
で作業する必要がありますが、わかりません。私は間違って何をしているのですか?どうすれば修正できますか?私は私の問題を解決するものを見つけることができないので、これは複製ではないことを本当に願っています。ありがとう。
編集:
struct Node{
int data;
Node* next;
};
「Node」の定義に問題があると思います。 – Assimilater
動的に割り当てられる「temp」ノードが必要なようです。そうでなければ、プログラムは動作しません。標準の 'new'ではなく' shared_ptr'で動的に割り当てることを考えてください。 'Node'構造体を投稿することができれば助かります。 –
はい、 'Node'構造体を投稿してください:) – Assimilater