shared_ptr在哪里?


103

几个小时后试图找到shared_ptr的位置后,我现在感到非常沮丧。我看到的所有示例都没有显示完整的代码来包含shared_ptr(和正在运行的)标题。简单的声明stdtr1<memory>在一切都没有帮助!我已经下载了增强功能,但仍然没有显示!有人可以告诉我在哪里可以找到我吗?

感谢您让我发泄挫败感!

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

我正在使用MSVS2008。

编辑2:我不知道为什么,但是当我到处寻找shared_ptr时,我包括了[memory]和[boost / tr1 / memory.hpp]和[boost / tr1 / tr1 / memory]。没错

感谢您的所有回复。


3
如果您可以正确说明安装程序,例如编译器和增强版本/安装路径,可能会有所帮助
YeenFei 2010年

7
除非您使用的是C ++ 0x,否则shared_ptr它不是标准的一部分。尽管它是如此普遍,以至于有些人将其视为标准,即使它尚未出现。
Billy ONeal,2010年

4
在不知道您的环境是7.5位洗碗机芯片的GCC,128位大型机专有的编译器还是XCode的GCC版本的情况下,您认为我们应该如何回答这个问题?
2010年

只是添加一些有关我面临的问题的信息。如果您想使用c ++ 0x标准进行编译,则需要添加“ -std = c ++ 0x”作为g ++的参数。
Mital Vora 2011年

1
如果您使用的是MSVC,则只需要“ #include <memory>”(对于gcc,我有一个CMake Find()进行搜索,因此我可以声明预处理器定义以包含<boost / shared_ptr.hpp>与<首先将tr1 / shared_ptr.h>设置为boost上的tr1-注意,boost是“ hpp”而tr1是“ .h”-已在Gentoo / Fedora / Debian上进行了验证-当然,请确保还包含#include <memory>分别用于内存管理)
HidekiAI 2016年

Answers:


168

至少可以找到三个地方shared_ptr

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

  2. 如果您的C ++实现支持C ++ TR1库扩展,则std::tr1::shared_ptr可能位于<memory>(Microsoft Visual C ++)或<tr1/memory>(g ++的libstdc ++)中。Boost还提供了您可以使用的TR1实现。

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


3
对于VS 2008,您是否获得了“功能包”或安装了SP1?如果是这样,那么这里的第2部分适用于您,请使用命名空间tr1
凯特·格雷戈里

谢谢。这就像魔术。我不知道为什么,但是当我到处寻找shared_ptr时,我包括了<memory>和<boost / tr1 / memory.hpp>和<boost / tr1 / tr1 / memory>。当然,我不能。再次感谢。
杰克2010年

短暂离开C ++之后,我很惊讶地发现(在clang v3.1中)shared_ptr仍位于tr1命名空间中。有什么想法吗?
hiwaylon

3
@hiwaylon:您在编译-std=c++11吗?
James McNellis 2012年

@JamesMcNellis Yessir,很不幸,这导致了其他依赖项的不愉快,我无法继续(给定时间限制)。如果-std = c ++ 11是诀窍,那么当我能够返回到项目时,我可以充满信心地继续。谢谢。
hiwaylon 2012年


6

对于具有功能部件包更新的VS2008,可以在命名空间std :: tr1下找到shared_ptr。

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

如果您在C:\Program Files\Boost\boost_1_40_0IDE设置中添加了boost安装路径(例如@ ):

#include <boost/shared_ptr.hpp>

3

如果傻冒寻找博尔提升shared_ptr的,你可以很容易地被找到了答案谷歌搜索的shared_ptr,下面的链接的文档,并拉起一个完整的工作示例,如

无论如何,这是我刚刚破解的一个简单的完整工作示例:

#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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.