bugprone-return-const-ref-from-parameter¶
检测返回语句将常量引用参数作为常量引用返回的情况。 如果调用方使用 xvalues 作为参数,这可能会导致使用后释放错误。
在 C++ 中,常量引用参数可以接受 xvalues,这些 xvalues 将在调用后被析构。 当函数也以常量引用形式返回此类参数时,返回的引用可以在它引用的对象被销毁后使用。
可以通过声明一个有问题的函数的重载来解决这个问题,其中 const &
参数被声明为 &&
。 开发人员必须确保该函数的实现不会产生使用后释放错误,这正是此检查警告的错误。 将此类 &&
重载标记为 deleted
,也会消除警告。 在返回不同 const &
参数取决于函数的控制流的情况下,所有有问题的 const &
参数都被声明为 &&
的重载将解决此问题。
示例¶
struct S {
int v;
S(int);
~S();
};
const S &fn(const S &a) {
return a;
}
const S& s = fn(S{1});
s.v; // use after free