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.