返回对本地临时对象的引用

reg*_*cob 5 c++ xcode irrlicht objective-c++ ios

这段代码

virtual const core::matrix4& getViewMatrixAffector() const {return core::matrix4();};
Run Code Online (Sandbox Code Playgroud)

结果有一个警告告诉我“返回对本地临时对象的引用”......

如何解决这个警告?

如下所述,我试图删除“&”... 错误

Cás*_*nan 5

当您创建一个对象作为本地临时对象时,一旦函数的作用域结束,它就会被销毁。反过来,您永远不应该返回对它的引用,因为这会产生未定义的行为。考虑按值返回它,或返回指向自由存储上的对象的智能指针。


Rei*_*ica 3

由于您无法控制返回类型,因此必须确保返回一个有效的对象而不仅仅是一个临时对象。一种解决方案是函数局部静态变量:

virtual const core::matrix4& getViewMatrixAffector() const
{
  static const core::matrix4 val;
  return val;
};
Run Code Online (Sandbox Code Playgroud)

如果您发现自己在许多函数(具有相同类型的变量)中执行此操作,请创建val一个(适当重命名的)类的静态成员。