Aracılığıyla paylaş


Uyarı C26410

'parameter' parametresi, sabit benzersiz işaretçiye başvurudur, veya const T& yerine (const T*r.32)

Genellikle, sabit benzersiz işaretçi başvuruları anlamsızdır. Bunlar güvenli bir şekilde bir ham başvuru veya işaretçi ile değiştirilebilir. Bu uyarı, C++ Çekirdek Yönergeleri kuralı R.32'ye zorlar.

Açıklamalar

  • Benzersiz işaretçi denetimleri, akıllı işaretçileri tanımlamak için oldukça geniş ölçütlere sahiptir. C++ Çekirdek Yönergeleri kuralı R.31: Std olmayan akıllı işaretçileriniz varsa, benzersiz işaretçi ve paylaşılan işaretçi kavramlarını açıklayan std'den temel deseni izleyin. Buluşsal basit bir işlemdir ancak sürprizlere yol açabilir: Akıllı işaretçi türü, veya operator*'yi tanımlayan operator-> herhangi bir türdür. Kopyalanabilen bir türün (paylaşılan işaretçi), Rvalue olmayan bir başvuru parametresiyle ilgilenen bir genel kopya oluşturucusna veya aşırı yüklenmiş atama işlecine sahip olması gerekir.

  • Şablon kodu gürültülü uyarılar üretebilir. Şablonların, başvurular da dahil olmak üzere farklı dolaylı düzeylere sahip çeşitli tür parametreleriyle örnekleneebileceğini unutmayın. Bazı uyarılar belirgin olmayabilir ve düzeltmeler bazı şablonların yeniden çalışmasını gerektirebilir (örneğin, başvuru dolaylı işleminin açıkça kaldırılması). Şablon kodu kasıtlı olarak genelse uyarı gizlenebilir.

Kod analizi adı: NO_REF_TO_CONST_UNIQUE_PTR

Örnek

Gereksiz başvuru:

std::vector<std::unique_ptr<Tree>> roots = GetRoots();
std::for_each(
    roots.begin(),
    roots.end(),
    [](const auto &root) { Rebalance(root.get()); });   // C26410