在链表中,我们这样声明node
:
struct node
{
int data; // Data part
struct node* next; // pointer to next node
node(int key)
{
data = key;
next = NULL;
}
};
我们的插入函数看起来像这个
void insert(int key)
{
struct node* go = head; // Head is global.
while(go != NULL)
{
go = go -> next;
}
go -> next = new node(key);
}
如果函数insert
实际上返回void
,那么它如何能够对链表进行更改?
操作员new
(从空闲存储)分配的内存是否像全局变量一样?
new不像全局变量。在C++中,全局变量(假设您不是在谈论全局指针)是在应用程序入口点(即"main")被调用之前分配的,并在应用程序关闭时解除分配。
另一方面,new在调用时分配新内存,在调用delete 时解除分配
MyClass* c = new MyClass(); // Allocate
// ..
delete c; // Deallocate, MyClass c is deleted
所以,如果你用new创建了一些对象,永远不要删除它。它会一直存在,但你可能会丢失指向分配数据的指针,从而导致内存泄漏。