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

MWr*_*ght 18 c++ g++ shared-ptr

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

我做了什么:

我曾试图单独编译我既头码- <memory><tr1/memory>,但仍然在这两种情况下得到下面的错误.

我正在使用的gcc版本是

gcc --version
gcc (GCC) 4.3.2
Run Code Online (Sandbox Code Playgroud)

当我包含<memory>标题我使用std::shared_ptr和我使用的<tr1/memory>标题std::tr1::shared_ptr?它是否正确?

我已经设置了shared_ptr,如下所示:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() );
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

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
Run Code Online (Sandbox Code Playgroud)

当我尝试<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
Run Code Online (Sandbox Code Playgroud)

看起来我没有正确包含一些东西.有任何想法吗?

我知道boost库有,shared_ptr但这些库目前不适合我.

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

PS有没有关于标准智能指针的有用文献?

Alo*_*ave 23

std::tr1::shared_ptr是C++ STL中TR1新增功能的一部分.
通过GCC,可通过#include <tr1/memory>(GCC 4.1)或#include <memory>(GCC 4.3)获得

  • 在GCC中,它也取决于`-std = c ++ 0x`编译器选项的存在.(或者从4.7开始`-std = c ++ 11`.) (7认同)
  • @MWright:是的!你需要添加`-std = c ++ 0x` (2认同)

Car*_*ner 10

你也要求参考或文献......

我发现3篇文章可能有所帮助:

还有对您的代码示例的评论:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() ); 
Run Code Online (Sandbox Code Playgroud)

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

std::shared_ptr<A> ptr_A = shared_ptr( new A() ); 
Run Code Online (Sandbox Code Playgroud)


mur*_*att 6

如果你没有shared_ptr标准,你可以使用它来提升.

#include <boost/shared_ptr.hpp>

boost::shared_ptr<A> ptr_A( new A() );
Run Code Online (Sandbox Code Playgroud)