C++ 使用 new 关键字创建对象和直接创建对象有什么区别吗?

17 浏览
0 Comments

C++ 使用 new 关键字创建对象和直接创建对象有什么区别吗?

这个问题已经有了答案

实例化对象时使用new与不使用的区别是什么

我有一个返回指针的函数,如下:

Obj * foo()
{
    Obj obj;
    return &obj;
}

前一个函数和下一个函数之间有什么区别吗?

Obj * foo2()
{
    Obj *ptr = new Object();
    return ptr;
}

admin 更改状态以发布 2023年5月21日
0
0 Comments

在第一版本中,您返回了一个悬挂指针。相反,您应该通过值返回:

Obj foo()
{
    Obj obj;
    return obj;
}

0
0 Comments

是的,是这样的。第一种方法在堆栈上创建一个对象并返回其地址。当函数返回时,栈开始展开并且对象被销毁。因此,调用方最终会得到一个悬空指针。

第二种方法在堆上分配一个对象并返回地址。对象是有效的,直到调用方明确删除它。

你永远不应该使用第一种方法!

0