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
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.(Aslında düzeltiyorum. this -- uzmanlaşmastd::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ürleridelete []
kullanırunique_ptr
içinshared_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
C - başvurular için geçen std::shared_...
Boost::shared_ptr bunu almak için...
boost ile static_cast::shared_ptr?...
Nasıl Android Mall of Sofia ile boost ...
Boost ile NULL işaretçi::shared_ptr?...