警告 C26402
Return a scoped object instead of a heap-allocated if it has a move constructor (r.3).
备注
为避免混淆指针是否拥有对象,返回可移动对象的函数应在堆栈上分配该对象。 然后,它应按值返回对象,而不是返回堆分配的对象。 如果需要指针语义,则返回智能指针而不是原始指针。 有关详细信息,请参阅 C++ Core Guidelines R.3:如果函数返回在函数中分配但具有移动构造函数的对象,则发出警告。建议考虑改为按值返回对象。
示例
此示例显示了引发警告 C26409 的 bad_example
函数。 它还演示函数 good_example
如何不导致此问题。
// C26402.cpp
struct S
{
S() = default;
S(S&& s) = default;
};
S* bad_example()
{
S* s = new S(); // C26409, avoid explicitly calling new.
// ...
return s; // C26402
}
// Prefer returning objects with move contructors by value instead of unnecessarily heap-allocating the object.
S good_example() noexcept
{
S s;
// ...
return s;
}