我是 C++ 新手。面试官说在函数中创建对象是不好的做法。是这样吗?
#include <iostream.h>
class linkedlist {
int value;
linkedlist *next;
static linkedlist *p=NULL;
void insert(int data) {
linkedlist node;
node.value=data;
node.next=NULL;
if(p==NULL)
p=node;
else {
p->next=node;
p=p->next;
}
}
}
int main() {
linkedlist h;
h.insert(10);
h.insert(20);
return 0;
}
最佳答案
问题是“生命周期”;您创建的节点仅存在于函数的堆栈帧中,当函数终止时,其内存将被回收。然而,静态指针 p
仍然会链接它,这将在以后有人访问链接列表时导致“未定义的行为”。
一般来说,使用局部对象并不坏,只有当您希望它们在函数结束时存活下来时才是不好的,因为它们不会。
您应该使用 new
将长期存在的对象分配给空闲存储区中的对象。
关于c++ - 为什么在 C++ 中的函数内创建对象是一种不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45628555/