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
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."

Boost::shared_ptr bunu almak için...
değeri tarafından başvuru veya shared_...
boost ile static_cast::shared_ptr?...
Shared_ptr kullanmak için örnek?...
Nasıl Android Mall of Sofia ile boost ...