我正在尝试在代码中使用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智能指针的有用文献?
答案 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
。 shared_ptr
的每个方法以及示例代码。还对您的代码示例发表评论:
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() );