다음을 통해 공유


경고 C26402

Return a scoped object instead of a heap-allocated if it has a move constructor (r.3).

설명

포인터가 개체를 소유하는지 여부를 혼동하지 않으려면 이동 가능한 개체를 반환하는 함수가 스택에 할당해야 합니다. 그런 다음 힙 할당 개체를 반환하는 대신 값으로 개체를 반환해야 합니다. 포인터 의미 체계가 필요한 경우 원시 포인터 대신 스마트 포인터를 반환합니다. 자세한 내용은 C++ 핵심 지침 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;
}