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

问题描述 投票:18回答:4

我正在尝试在代码中使用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智能指针有有用的文献吗?

c++ g++ shared-ptr
4个回答
23
投票

std::tr1::shared_ptr是C ++ STL的TR1添加的一部分。对于GCC,可以通过#include <tr1/memory>(GCC 4.1)或#include <memory>(GCC 4.3)使用]


10
投票

您也正在要求参考或文献...

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

也请对您的代码示例进行注释:

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

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

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

6
投票

如果您没有std中的shared_ptr,则可以通过boost使用它。

#include <boost/shared_ptr.hpp>

boost::shared_ptr<A> ptr_A( new A() );
© www.soinside.com 2019 - 2024. All rights reserved.