根据编译器的不同,这两段代码会产生非常不同的结果,我不明白为什么
node *active_node = new node;
vs
node current_node;
node *active_node;
active_node = ¤t_node;
据我了解,我正在手动创建一个节点对象,并将其分配给活动节点指针,与上面的动态分配相同。但是,它们在程序上下文中产生了完全不同的结果
答案 0 :(得分:10)
在此代码中:
node *active_node = new node;
您正在动态(堆)内存中分配一个node
对象,然后将其地址分配给active_node
。 node
对象将一直存在,直到程序终止或您delete
为止。
在此代码中:
node current_node;
node *active_node;
active_node = ¤t_node;
您要在自动(堆栈)内存中分配current_node
,然后将其地址分配给active_node
。 current_node
对象在超出范围(函数末尾等)时将死亡,而使active_node
指向无效内存。