我正在尝试在代码中使用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不推荐使用-pthread -m32我有什么遗漏吗?
P.S。关于std智能指针有有用的文献吗?
std::tr1::shared_ptr
是C ++ STL的TR1添加的一部分。对于GCC,可以通过#include <tr1/memory>
(GCC 4.1)或#include <memory>
(GCC 4.3)使用]
您也正在要求参考或文献...
我发现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() );
如果您没有std中的shared_ptr
,则可以通过boost使用它。
#include <boost/shared_ptr.hpp>
boost::shared_ptr<A> ptr_A( new A() );