我有函数返回一个像;
的指针Obj * foo()
{
Obj obj;
return &obj;
}
上一个功能和下一个功能之间是否存在差异
Obj * foo2()
{
Obj *ptr = new Object();
return ptr;
}
答案 0 :(得分:2)
是的,确实如此。第一个在堆栈上创建一个对象并返回其地址。当函数返回时,堆栈展开并且对象被销毁。因此调用者最终会有一个悬空指针。
第二个在堆上分配一个对象并返回该地址。该对象是有效的,并且将继续如此,直到调用者明确删除它为止。
你永远不应该采取第一种方法!
答案 1 :(得分:2)
在第一个版本中,您将返回一个悬空指针。您应该按值返回:
Obj foo()
{
Obj obj;
return obj;
}
答案 2 :(得分:0)
第一个功能不正确。您将返回指向本地对象的指针,但是当函数返回时,所有本地对象都将被销毁。