C ++ std :: shared_ptr用法和信息

时间:2011-11-17 17:18:17

标签: c++ g++ shared-ptr

我正在尝试在代码中使用std::shared_ptr。我已经看到有关于这个问题的其他问题,但我仍然遇到编译器错误。我有正确版本的gcc和设置吗?

我做了什么:

我尝试使用两个标题分别编译我的代码 - <memory><tr1/memory>,但在这两种情况下仍会出现以下错误。

我正在使用的gcc版本是

gcc --version
gcc (GCC) 4.3.2

当我添加<memory>标头时,我使用std::shared_ptr并使用<tr1/memory>标头我使用std::tr1::shared_ptr?这是对的吗?

我已按如下方式设置shared_ptr:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() );

我得到的错误如下:

src/WH.cxx:156: error: 'shared_ptr' is not a member of 'std'
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope

当我尝试<tr1/memory>标题

src/WH.cxx:156: error: 'std::tr1' has not been declared
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope

看起来我没有正确包含某些内容。有什么想法吗?

我知道boost库有shared_ptr但是这些库目前不适合我。

修改: 只是添加,我的编译器选项如下: g ++ -O3 -g3 -m32 -fPIC -Wno-deprecated -pthread -m32 我错过了什么吗?

P.S。有没有关于std智能指针的有用文献?

3 个答案:

答案 0 :(得分:23)

std::tr1::shared_ptr是TR1添加到C ++ STL的一部分 通过GCC,可通过#include <tr1/memory>(GCC 4.1)或#include <memory>(GCC 4.3)获取

答案 1 :(得分:10)

您还要求提供参考或文献......

我找到了3篇可能有帮助的文章:

还对您的代码示例发表评论:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() ); 

模板参数应为A而不是A *:

std::shared_ptr<A> ptr_A = shared_ptr( new A() ); 

答案 2 :(得分:6)

如果您在标准版中没有shared_ptr,则可以在boost中使用它。

#include <boost/shared_ptr.hpp>

boost::shared_ptr<A> ptr_A( new A() );