Shared_ptr nerede?


103

Shared_ptr'nin nerede olduğunu bulmaya çalıştıktan birkaç saat sonra şu anda çok sinirliyim. Gördüğüm örneklerin hiçbiri, başlıkları içeren shared_ptr(ve çalışan) tam kod göstermiyor . Basitçe belirterek std, tr1ve <memory>hiç yardımcı olmuyor! Takviyeleri indirdim ve hepsi ama yine de görünmüyor! Birisi tam olarak nerede bulacağımı söyleyerek bana yardım edebilir mi?

Hayal kırıklıklarımı dışa vurmama izin verdiğin için teşekkürler!

DÜZENLEME: Başlığımın değiştirildiğini görüyorum. Bunun için üzgünüm. Yani ... aynı zamanda, paylaşılan_ptr'nin "C ++ sürümüne bağlı" olduğu benim için net olmadığından -> bu yüzden ortamımı belirtmedim -> bu nedenle muhtemelen onu bulmamın bu kadar zor olmasının nedeni buydu.

MSVS2008 üzerinde çalışıyorum.

DÜZENLEME 2: Nedenini bilmiyorum ama paylaşımlı_ptr için her yerde bakarken [bellek] ve [boost / tr1 / memory.hpp] ve [boost / tr1 / tr1 / memory] ekledim .. Tabii ki yapamadım t.

Tüm yanıtlar için teşekkürler.


3
hangi derleyici ve yükseltici sürüm / kurulum yolu gibi kurulumunuzu doğru şekilde belirtmeniz muhtemelen yararlı olacaktır
— YeenFei

7
C ++ 0x üzerinde olmadığınız sürece shared_ptr, standardın bir parçası değildir. O kadar yaygındır ki, bazıları henüz olmamasına rağmen onu standart olarak ele alır.
— Billy ONeal

4
Ortamınızın 7.5bit bulaşık makinesi yongası için GCC, 128bit ana bilgisayarın tescilli derleyicisi veya XCode'un GCC sürümü olup olmadığını bilmeden bu soruyu nasıl yanıtlamamız gerektiğini düşünüyorsunuz?
— sbi

Karşılaştığım sorun hakkında biraz bilgi eklemek için .. Eğer c ++ 0x standardı ile derlemek istiyorsanız, g ++ argümanı olarak "-std = c ++ 0x" eklemeniz gerekir.
— Mital Vora

1
MSVC kullanıyorsanız, sadece "#include <memory>" (gcc için, arama için bir CMake Find () var, böylece <boost / shared_ptr.hpp> ile <boost / shared_ptr.hpp> arasındaki önişlemci tanımını bildirebilirim. tr1 / shared_ptr.h>, güçlendirme yerine tr1 olmak üzere ilk seçenek olarak - artırmanın "hpp" olduğunu ve tr1'in ".h" olduğunu - Gentoo / Fedora / Debian'da doğrulandığını unutmayın - ve elbette #include <memory> de olduğundan emin olun bellek yönetimi için ayrı ayrı)
— HidekiAI

Yanıtlar:


168

Bulabileceğiniz en az üç yer vardır shared_ptr:

  1. C ++ uygulamanız C ++ 11'i (veya en azından C ++ 11'i shared_ptr) destekliyorsa , o std::shared_ptrzaman içinde tanımlanacaktır <memory>.

  2. C ++ uygulamanız C ++ TR1 kitaplık uzantılarını destekliyorsa, std::tr1::shared_ptrbüyük olasılıkla <memory>(Microsoft Visual C ++) veya <tr1/memory>(g ++ 's libstdc ++) içinde olacaktır. Boost ayrıca kullanabileceğiniz bir TR1 uygulaması sağlar.

  3. Aksi takdirde, Boost kütüphaneleri ve alıp kullanabilirsiniz boost::shared_ptrbulunabilir, <boost/shared_ptr.hpp>.


3
VS 2008 için, "özellik paketini" aldınız mı yoksa SP1'i mi yüklediniz? Öyleyse, buradaki 2. bölüm sizin için geçerliyse, ad alanını kullanın tr1.
— Kate Gregory

Teşekkürler. Bu sihir gibi çalışır. Nedenini bilmiyorum ama paylaşımlı_ptr için her yerde bakarken <memory> ve <boost / tr1 / memory.hpp> ve <boost / tr1 / tr1 / memory> ekledim .. Tabii ki yapamadım. Tekrar teşekkürler.
— Jake

Kısaca C ++ 'dan uzaklaştıktan sonra (clang v3.1'de) shared_ptrhala bir tr1isim alanında oturmakta olduğunu görünce şaşırdım . Bununla ilgili herhangi bir fikrin var mı?
— hiwaylon

3
@hiwaylon: ile derliyor musunuz -std=c++11?
— James McNellis

@JamesMcNellis Yessir, maalesef bu diğer bağımlılıklarda bazı mutsuzluklara neden oldu ve devam edemedim (zaman kısıtlamaları nedeniyle). Eğer -std = c ++ 11 hiledir ben projeye iade edebilir olduğumda, ben güvenle devam edebilir. Teşekkür ederim.
— hiwaylon


6

özellik paketi güncellemeli VS2008 için, shared_ptr ad alanı std :: tr1 altında bulunabilir.

std::tr1::shared_ptr<int> MyIntSmartPtr = new int;

nın-nin

C:\Program Files\Boost\boost_1_40_0IDE ayarlarınıza hızlı yükleme yolu (örneğin @ ) eklediyseniz:

#include <boost/shared_ptr.hpp>

3

Your'e bor seyir halinde destek 'ın Shared_ptr , kolayca tarafından cevap buldu olabilirdi Shared_ptr Googling , dokümanlar bağlantıları takip ve bu nedenle tam bir çalışma örneği yukarı çekerek bu .

Her halükarda, işte size az önce hacklediğim minimalist eksiksiz bir çalışma örneği:

#include <boost/shared_ptr.hpp>

struct MyGizmo
{
    int n_;
};

int main()
{
    boost::shared_ptr<MyGizmo> p(new MyGizmo);
    return 0;
}

İçin için #includebaşlık bulmak için, kütüphaneler belli ki arama yolunda olmak gerekir. MSVC'de, bunu Proje Ayarları> Yapılandırma Özellikleri> C / C ++> Ek Dahil Etme Dizinlerinde ayarlarsınız. Benim durumumda bu ayarlandıC:\Program Files (x86)\boost\boost_1_42

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.