2010-05-27 86 views
89

几个小时后,我非常沮丧地试图找到shared_ptr所在的位置。我看到的例子都没有显示包含shared_ptr(和working)标题的完整代码。简单地说,stdtr1<memory>根本没有帮助!我已经下载了提升和所有,但它仍然不显示!有人可以帮助我确切地知道在哪里找到它吗?shared_ptr在哪里?

感谢您让我发泄我的挫折!编辑: 我看到我的标题已被更改。对于那个很抱歉。 所以......这也是因为我不清楚shared_ptr是“C++版本依赖” - >这就是为什么我没有说明我的环境 - >因此可能为什么我很难找到它。

我在MSVS2008上工作。

编辑2: 我不知道为什么,但我是包括[内存]和[升压/ TR1/memory.hpp]和[升压/ TR1/TR1 /内存虽然到处找shared_ptr的..当然,我不能。

感谢您的所有回复。

+3

如果你可以正确说明你的设置,比如什么编译器和boost版本/安装路径 – YeenFei 2010-05-27 03:03:35

+7

除非你在C++ 0x上,'shared_ptr'不是标准的一部分。尽管它还没有出现,但有些人会将其视为标准,这很常见。 – 2010-05-27 03:03:58

+4

您认为我们应该如何回答这个问题,而不知道您的环境是7.5位洗碟机芯片的GCC,128位大型机的专有编译器还是XCode的GCC版本? – sbi 2010-05-27 06:45:53

回答

153

至少有三个地方,你可能会发现shared_ptr

  1. 如果您的C++实现支持C++ 11(或至少C++ 11 shared_ptr),那么std::shared_ptr将在<memory>中定义。

  2. 如果你的C++实现支持C++ TR1库扩展,然后std::tr1::shared_ptr可能会在<memory>(微软的Visual C++)或<tr1/memory>(G ++的的libstdC++)。 Boost还提供了一个可以使用的TR1实现。

  3. 否则,您可以获取Boost库并使用boost::shared_ptr,它可以在<boost/shared_ptr.hpp>中找到。

+3

对于VS 2008,您是否获得了“功能包”或者是否安装了SP1?如果是这样,那么第2部分适用于你,使用命名空间'tr1'。 – 2010-05-27 12:12:32

+0

谢谢。这工作像魔术一样。我不知道为什么,但我在包含的同时寻找shared_ptr。当然,我不能。再次感谢。 – Jake 2010-05-27 15:00:26

+0

简单地从C++走开后,我惊讶地发现(在clang v3.1中)'shared_ptr'仍然位于'tr1'命名空间中。对此有何想法? – hiwaylon 2012-08-08 12:37:22

6

与功能包更新VS2008,shared_ptr的可以在名字空间std中找到:: TR1。

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

,如果你有提升的安装路径(例如@C:\Program Files\Boost\boost_1_40_0

添加到您的IDE设置:

#include <boost/shared_ptr.hpp> 
4

如果傻冒寻找博尔boostshared_ptr,你可以很容易地通过googling shared_ptr找到了答案,下面的链接的文档,并拉起了完整的工作示例如this

在任何情况下,这里是一个简约的完整的工作示例为你,我只是砍死了:

#include <boost/shared_ptr.hpp> 

struct MyGizmo 
{ 
    int n_; 
}; 

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

为了使#include找头,图书馆显然需要在搜索路径。在MSVC中,您可以在项目设置>配置属性> C/C++>其他包含目录中进行设置。在我的情况下,这是设置为C:\Program Files (x86)\boost\boost_1_42