创建链表时使用 'new'

Using 'new' when creating a linked list

我一直在尝试用 C++ 创建链表。我试图在创建它时避免使用关键字new,但它似乎不起作用

// Linked lists
struct Node 
{
    int value;
    Node *next;

    Node( int val ) : value( val ), next(nullptr) {};
};


int main() 
{
    vector<int> vec = { 2,5,7,1,4,7 };

    //insertian
    Node head(0); // we need to use a pointer
    Node* ptr = &head;

    for ( auto v : vec)
    {
        Node* temp = new Node( v ); // Node temp( v );
        ptr->next = temp; //ptr->next = &temp;
        ptr = ptr->next; 
    }
}

上面的代码工作正常。但是如果我用注释行替换循环内的代码,那么它就会失败。我不知道为什么。

我还得知您在使用 new 时需要执行 delete。如果无法避免使用 new 那么如何执行 delete

Node temp( v ) 将创建一个作用域为 for 循环的局部变量。每次迭代都会创建局部变量,并在迭代结束时销毁。

您正在存储指向局部变量的指针,这是未定义的行为。可能发生的情况是,在每次迭代中,局部变量都是在旧变量之上创建的(这也取决于实现)。

因为您希望节点的寿命超过迭代的生命周期,您需要通过 new

在堆上分配节点