C++ 共享ptr在哪里?

C++ 共享ptr在哪里?,c++,boost,c++11,shared-ptr,smart-pointers,C++,Boost,C++11,Shared Ptr,Smart Pointers,我现在很沮丧,因为我花了几个小时试图找到共享的ptr的位置。我看到的示例中没有一个完整的代码包含shared\u ptr(和working)的标题。简单地说明std、tr1和根本没有帮助!我已经下载了boots,但是它仍然没有出现!有人能告诉我在哪里能找到它吗 谢谢你让我发泄我的沮丧 编辑: 我看到我的头衔被改变了。很抱歉。 所以这也是因为我不清楚shared_ptr是否“依赖于C++版本”-->这就是我没有说明我的环境的原因-->因此可能是我很难找到它的原因 我正在MSVS2008上工作 编辑

我现在很沮丧,因为我花了几个小时试图找到共享的ptr的位置。我看到的示例中没有一个完整的代码包含
shared\u ptr
(和working)的标题。简单地说明
std
tr1
根本没有帮助!我已经下载了boots,但是它仍然没有出现!有人能告诉我在哪里能找到它吗

谢谢你让我发泄我的沮丧

编辑: 我看到我的头衔被改变了。很抱歉。 所以这也是因为我不清楚shared_ptr是否“依赖于C++版本”-->这就是我没有说明我的环境的原因-->因此可能是我很难找到它的原因

我正在MSVS2008上工作

编辑2: 我不知道为什么,但我在到处寻找共享的ptr时包括了[memory]和[boost/tr1/memory.hpp]和[boost/tr1/tr1/memory]。。当然,我不能

谢谢您的回复。


对于具有功能包更新的VS2008,可以在命名空间std::tr1下找到共享的ptr

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

您至少可以在三个地方找到
共享\u ptr

<> L> > P >如果C++实现支持C++ 11(或者至少是C++ 11代码> SydDypTrp/代码>),则<代码> STD::SyrdYPPTR < /C> >将在<代码> <代码> > < /P> 中定义。 <> LI> < P>如果C++实现支持C++ Tr1库扩展,那么<代码> STD::StR1::SyrdYPPTR 可能会在<代码> <代码>(微软Visual C++)或<代码> <代码>(G++的LISSTDC ++)。Boost还提供了一个可以使用的TR1实现

  • 否则,您可以获得Boost库并使用
    Boost::shared\u ptr
    ,可以在
    中找到

  • 如果你看起来像bor,你可以很容易地找到答案,按照文档的链接,并拿出一个完整的工作示例,例如

    在任何情况下,这里都有一个我刚刚拼凑的最简单的完整工作示例:

    #include <boost/shared_ptr.hpp>
    
    struct MyGizmo
    {
        int n_;
    };
    
    int main()
    {
        boost::shared_ptr<MyGizmo> p(new MyGizmo);
        return 0;
    }
    
    #包括
    结构MyGizmo
    {
    int n_;
    };
    int main()
    {
    boost::shared_ptr p(新MyGizmo);
    返回0;
    }
    

    为了让
    #include
    找到标题,库显然需要位于搜索路径中。在MSVC中,您可以在项目设置>配置属性>C/C++>其他包含目录中设置此选项。在我的例子中,这被设置为
    C:\ProgramFiles(x86)\boost\boost\u 1\u 42

    ,如果您能够正确地陈述您的设置,比如什么编译器和boost版本/安装路径,可能会有所帮助,除非您使用的是C++0x,
    共享的\u ptr
    。这是一种非常普遍的现象,有些人会将其视为标准,即使它还没有上市。在不知道您的环境是用于7.5位洗碗机芯片的GCC、128位大型机专有编译器还是XCode版本的GCC的情况下,您认为我们应该如何回答这个问题?只是想补充一些关于我所面临问题的信息。。如果你想用c++0x标准编译,你需要添加“-std=c++0x”作为g++的参数。如果你在MSVC上,那么你只需要“#include”(对于gcc,我有一个用于搜索的CMake Find(),这样我就可以声明预处理器定义包含任何一个,而不是作为首选的tr1而不是boost-注意boost是“hpp”,而tr1是“.h”-在Gentoo/Fedora/Debian上进行了验证-当然,还要确保VS 2008也有#包括内存管理功能(单独使用),您是获得了“功能包”还是安装了SP1?如果是这样,那么这里的第2部分适用于您,请使用名称空间
    tr1
    。谢谢。这就像魔术一样。我不知道为什么,但我在到处寻找共享的ptr时。。当然,我不能。再次感谢。我已经远离C++,惊讶地发现(在CLANV3.1)<代码> SyddYPPT/<代码>仍然坐在<代码> Tr1< /Cord>命名空间中。有什么想法吗?@hiwaylon:你是用
    -std=c++11
    编译的吗?@JamesMcNellis Yessir,不幸的是,这导致了对其他依赖项的不满,我无法继续(考虑到时间限制)。如果-std=c++11是诀窍,那么当我能够返回项目时,我可以满怀信心地继续。非常感谢。
    #include <boost/shared_ptr.hpp>
    
    struct MyGizmo
    {
        int n_;
    };
    
    int main()
    {
        boost::shared_ptr<MyGizmo> p(new MyGizmo);
        return 0;
    }