c++ - 为什么在 C++ 中的函数内创建对象是一种不好的做法?

标签 c++ oop data-structures linked-list

我是 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/

相关文章:

c++ - Qt 和可变参数函数

c++ - addNode 和 addChild 的区别

java - 未声明的实例变量的初始化

algorithm - 二维矩阵中的最佳方形覆盖(最小化覆盖成本)

c++ - 双端队列上的多种类型?

c++ - 重载运算符返回类型

C++ session 管理方法

python - 以对象表示的数据

c++ - 在链表中插入 'n' 节点并打印其数据(C++)

python - 如何在 Python 中创建映射到列表的键字典,其中列表中的每个元素都指向其他列表?