Aracılığıyla paylaş


Uyarı C26402

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

Açıklamalar

bir işaretçinin nesneye sahip olup olmadığıyla ilgili karışıklığı önlemek için, taşınabilir bir nesne döndüren bir işlev bunu yığında ayırmalıdır. Daha sonra yığınla ayrılmış bir nesne döndürmek yerine nesneyi değere göre döndürmelidir. İşaretçi semantiği gerekiyorsa ham işaretçi yerine akıllı işaretçi döndürebilirsiniz. Daha fazla bilgi için bkz . C++ Çekirdek Yönergeleri R.3: Bir işlevin işlev içinde ayrılmış ancak bir taşıma oluşturucusunun olduğu bir nesne döndürdüğünde uyarma. Bunun yerine değere göre döndürmeyi düşünün.

Örnek

Bu örnekte C26409 uyarı veren bir bad_example işlev gösterilmektedir. Ayrıca işlevin good_example bu soruna nasıl neden olmadığını da gösterir.

// 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;
}