SORU
29 Kasım 2008, CUMARTESİ


C - başvurular için geçen std::shared_ptr veya boost::shared_ptr

Eğer shared_ptr, daha verimli geçmesi için (shared_ptr kopyalama önlemek amacıyla nesne) için bir referans değil mi?bir işe ihtiyacı olan bir işlevi varsa Olası yan etkileri nelerdir? İki olası durum öngörülüyor:

1) bir kopyasını argüman yapılır işlevi içinde, gibi

ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp)  
{  
     ...  
     m_sp_member=sp; //This will copy the object, incrementing refcount  
     ...  
}

2) bağımsız değişken yalnızca kullanılır işlevi içinde, gibi

Class::only_work_with_sp(boost::shared_ptr<foo> &sp) //Again, no copy here  
{    
    ...  
    sp->do_something();  
    ...  
}

Her iki durumda da iyi bir neden destek geçirmek için göremiyorum::shared_ptr referans değer yerine. Değeriyle geçirmeden sadece "" başvuru sayısı kopyalama nedeniyle artış ve işlevi çıkılıyor, sonra da bu indirim kapsamında.geçici olur Bir bakan ben miyim?

Andrea.

DÜZENLEME:< / ^ br . Sadece birkaç cevap okuduktan sonra netleştirmek için : ben çok erken optimizasyon endişeleri katılıyorum, ve ben hep ilk-profil-o-on-the-sıcak noktaları olmaya çalışın. Benim sorum, eğer ne demek istediğimi biliyorsan daha tamamen teknik-nokta-Kod görünümünde bir mesafedeydi.

CEVAP
13 Ocak 2012, Cuma


Uzman opinons aramaya gittim en yüksek oy cevabı belirtmiş kendimi buldum ve işte geldi. http://channel9.msdn.com/Shows/Going Deep/C-and-Beyond-2011-Scott-Andrei-and-Herb-Ask-Us-Anything

Herb Sutter: shared_ptr, kopya pahalı geçirdiğinizde""

Scott Meyers: "değeri vereceksin olsun gelince shared_ptr hakkında özel bir şey Yok, ya da referans. by pass Kullanıcı tanımlı başka bir türü için kullandığınız aynı analizi kullanın. İnsanlar shared_ptr bir şekilde tüm yönetim problemleri çözer ve küçük olduğu için, mutlaka ucuz bir değer geçmek için bu algı var gibi görünüyor. Bu kopyalanan ve bir maliyet ile ilgili... pahalı pas değer, eğer öyleyse ben bu işten sıyrılacağını uygun dil bilimi programım, ben almayayım o referansı ile sabit veya referans yerine"

Herb Sutter: "her zaman geçirmek onları referansı ile sabit ve çok nadir belki, çünkü biliyorsun ne dedin diye değiştir şey var bir referans, belki o zaman belki geçer değer... Eğer kopya olarak parametreleri, Aman Tanrım neredeyse hiç ihtiyaç vuran başvuru sayısı çünkü tutuklu hayatta her neyse, geçen bu başvuru, lütfen öyle olsun"

Güncelleme: Ot genişletilmiş bu işte: http://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/, ancak ahlaki bir hikaye olduğunu olmamalısın geçen shared_ptr de "sürece istediğiniz için kullanmak veya işlemek akıllı işaretçi kendisi gibi paylaşımı veya transfer mülkiyet."

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FamilyFeud

    FamilyFeud

    22 AĞUSTOS 2006
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011