“ new”和“ =”在指针方面的区别

时间:2018-07-16 22:54:34

标签: c++ c++11

根据编译器的不同,这两段代码会产生非常不同的结果,我不明白为什么

node *active_node = new node;

vs

node current_node;
node *active_node;
active_node = &current_node;

据我了解,我正在手动创建一个节点对象,并将其分配给活动节点指针,与上面的动态分配相同。但是,它们在程序上下文中产生了完全不同的结果

1 个答案:

答案 0 :(得分:10)

在此代码中:

node *active_node = new node;

您正在动态(堆)内存中分配一个node对象,然后将其地址分配给active_nodenode对象将一直存在,直到程序终止或您delete为止。

在此代码中:

node current_node;
node *active_node;
active_node = &current_node;

您要在自动(堆栈)内存中分配current_node,然后将其地址分配给active_nodecurrent_node对象在超出范围(函数末尾等)时将死亡,而使active_node指向无效内存。