警告 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;
}