Aracılığıyla paylaş


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();
}