作者:BrucelLi | 来源:互联网 | 2022-12-10 14:38
这两段代码根据编译器创建了非常不同的结果,我不明白为什么
node *active_node = new node;
VS
node current_node;
node *active_node;
active_node = ¤t_node;
根据我的理解,我手动创建节点对象并将其分配给活动节点指针,与上面的动态分配相同.但是,它们在程序的上下文中产生完全不同的结果
1> Filip Vondrá..:
在这段代码中:
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
指向无效的内存.