Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 constructors by value instead of unnecessarily heap-allocating the object.
S good_example() noexcept
{
S s;
// ...
return s;
}