Uyarı C26418
Paylaşılan işaretçi parametresi kopyalanmaz veya taşınmaz. Bunun yerine T* veya T& kullanın.
C++ Temel Yönergeleri: R.36: Nesneye başvuru sayısını koruyabileceğini ifade etmek için sabit bir shared_ptr<pencere öğesi>¶metresi alın
Paylaşılan işaretçi parametresi değere veya sabit bir nesneye başvuruyla geçirilirse, işlevin çağıranı etkilemeden hedef nesnenin yaşam süresi denetimini alması beklenir. Kod, paylaşılan işaretçi parametresini başka bir paylaşılan işaretçi nesnesine kopyalamalı veya taşımalı ya da paylaşılan işaretçileri kabul eden işlevleri çağırarak bunu başka bir koda geçirmelidir. Aksi takdirde, düz bir işaretçi veya başvuru uygulanabilir olabilir.
Açıklamalar
Bu denetim, paylaşılan işaretçiler
std::shared_pointer
gibi davranma olasılığı olan ve kullanıcı tanımlı türleri tanır. Kullanıcı tanımlı paylaşılan işaretçiler için aşağıdaki özellikler beklenir:aşırı başvuru veya üye erişim işleçleri (genel ve silinmemiş);
kopyalama oluşturucu veya kopyalama atama işleci (genel ve silinmemiş);
silinmemiş veya varsayılan olarak ayarlanmamış bir genel yıkıcı. Boş yıkıcılar yine de kullanıcı tanımlı olarak sayılır.
Örnekler
gereksiz arabirim komplikasyonu
template<class T>
std::string to_string(const std::shared_ptr<T> &e) // C26418, also C26415 SMART_PTR_NOT_NEEDED
{
return !e ? null_string : e->to_string();
}
gereksiz arabirim komplikasyonu - basitleştirilmiş
template<class T>
std::string to_string(const T *e)
{
return !e ? null_string : e->to_string();
}