SORU
12 HAZİRAN 2011, Pazar


Boost kullanarak geçiş yapayım::shared_ptr std::shared_ptr?

-std=c 0x GCC C 0 x desteğini etkinleştirmek için istiyorum. Kesinlikle mutlaka GCC 4.5 currently supported C 11 features (ve yakında 4.6) herhangi bir ihtiyacım yok, ama onlara alışmaya başlamak istiyorum. Kullanımına kullanıyorum pek az yerde, örneğin, auto Bir tür faydalı olacaktır.

Fakat yine de, bilmiyorumgerekşu anda desteklenen özellikler. Burada amaç, benim programıma yeni standart özellikleri dahil etmek için teşvik etmektir"". kelime

Ne biliyorsun C 11 desteği, iyi fikir olanak GCC, ve sonra onu kucaklar, örneğin, anahtarlama kullanarak boost::shared_ptr std::shared_ptr özel olarak ikisi birlikte yürümez mi?

PS: shared_ptr farklı tatlar karşılaştırır this good question farkındayım ama daha yüksek bir düzeyde olan standart sonuçlanmadan kullanmak için tavsiye rica ediyorum. Başka bir şekilde koyarak, bir derleyici gibi GCC diyor desteklediği bir "deneysel bir özelliktir" demek, ben karşılaşma ihtimali garip hataları derleme sırasında bu olacak büyük zaman aldığını ve kaynağı gizli soru üzerinde StackOverflow?

Edit: shown by example in this question olarak sadece destek güvenmiyorum çünkü std::shared_ptr geri geçiş yapmak için GCC 4.5 karar verdim.

CEVAP
12 HAZİRAN 2011, Pazar


std::shared_ptr geçmek için iki neden vardır:

  • Sen Boost bağımlılık çıkarın.
  • Hata. Derleyici ve hata ayıklayıcı bağlı olarak, hata ayıklayıcı "" std::shared_ptr ve gösteri doğrudan söyle olmaz,, boost uygulaması nesneyi işaret. akıllı olabilir En azından Visual Studio, std::shared_ptr boost::shared_ptr boost iç organlarından bir grup ortaya çıkarır iken hata ayıklayıcı düz bir işaretçi gibi görünüyor.
  • Diğer yeni özellikler bağlantılı sorunuz tanımlı.
  • Birkaç refcount bir değişiklik kurtarabilecek neredeyse hareket semantiği etkin olması garanti olan bir uygulama. (Teorik olarak kendimi bu) test ettim2014-07-22 itibariyle en az, boost::shared_ptr anlar semantik taşıyın.
  • std::shared_ptr boost::shared_ptr Bu gibi durumlarda tanımsız davranış (shared_array veya özel bir deleter kullanmanız gerekir) neden olurken doğru dizi türleri delete [] kullanır(Aslında düzeltiyorum. this -- uzmanlaşma unique_ptr için shared_ptr.)

Ve bir büyük göze batan sebep:

  • C 11 derleyici ve standart kütüphane uygulamaları için kendini sınırlayıcı olursun.

Son olarak, gerçekten bir seçim yapmak zorunda değilsin. (Ve eğer belirli bir derleyici bir dizi (örneğin MSVC ve GCC) hedefleme iseniz, kolayca bu olduğunda std::tr1::shared_ptr kullanmak için yardımcı olabilir. Ne yazık ki TR1 destek algılama) için standart bir yolu yok

#if __cplusplus > 199711L
#include <memory>
namespace MyProject
{
    using std::shared_ptr;
}
#else
#include <boost/shared_ptr.hpp>
namespace MyProject
{
    using boost::shared_ptr;
}
#endif

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • newport83

    newport83

    19 HAZİRAN 2006
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013
  • ShayLoss

    ShayLoss

    5 Kasım 2009