linux使用shared_ptr出现错误
来源:互联网 发布:淘宝小蜜在哪里 编辑:程序博客网 时间:2024/06/06 09:58
我在不同的系统下采用下面的方式使用shared_ptr以及vector:
std::vector<const std::shared_ptr<Object> > pointer_arrays;std::vector<const std::shared_ptr<Object > >::const_iterator pointer_Iter;
并采用如下初始化:
const std::shared_ptr<WordData> object(new Object);wordDataTab.push_back(object);
这样在mac os下面编译,通过并且获得正确的结果。但是我在centos 下的使用gcc编译这段代码时出现如下的编译错误:
./test.cpp:19: instantiated from here/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/ext/new_allocator.h:95: error: invalid conversion from ‘const void*’ to ‘void*’/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/ext/new_allocator.h:95: error: initializing argument 1 of ‘void operator delete(void*)’In file included from /usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/char_traits.h:41, from /usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/ios:41, from /usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/ostream:40, from /usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/iostream:40, from ./test.h:12, from ./test.cpp:9:/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/stl_algobase.h: In static member function ‘static _BI2 std::__copy_move_backward<true, false, std::random_access_iterator_tag>::__copy_move_b(_BI1, _BI1, _BI2) [with _BI1 = const std::shared_ptr<Object>*, _BI2 = const std::shared_ptr<Object>*]’:/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/stl_algobase.h:595: instantiated from ‘_BI2 std::__copy_move_backward_a(_BI1, _BI1, _BI2) [with bool _IsMove = true, _BI1 = const std::shared_ptr<Object>*, _BI2 = const std::shared_ptr<Object>*]’/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/stl_algobase.h:605: instantiated from ‘_BI2 std::__copy_move_backward_a2(_BI1, _BI1, _BI2) [with bool _IsMove = true, _BI1 = const std::shared_ptr<Object>*, _BI2 = const std::shared_ptr<Object>*]’/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/stl_algobase.h:676: instantiated from ‘_BI2 std::move_backward(_BI1, _BI1, _BI2) [with _BI1 = const std::shared_ptr<Object>*, _BI2 = const std::shared_ptr<Object>*]’/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/vector.tcc:308: instantiated from ‘void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, _Args&& ...) [with _Args = const std::shared_ptr<Object>&, _Tp = const std::shared_ptr<Object>, _Alloc = std::allocator<const std::shared_ptr<Object> >]’/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:741: instantiated from ‘void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = const std::shared_ptr<Object>, _Alloc = std::allocator<const std::shared_ptr<Object> >]’
可以看到原来是stl_vector与const std::shared_ptr<Object>
结合使用出现问题,于是我这样定义:
std::vector<std::shared_ptr<Object> > pointer_arrays;std::vector<std::shared_ptr<Object > >::const_iterator pointer_Iter;再次编译,通过了。
这是因为:
shared_ptr<const T> p;
is similar to const T * p;
(or, equivalently, T const * p;
), that is, the pointed object is const
whereas const shared_ptr<T> p;
is similar to T* const p;
which means that p
is const
. In summary:
shared_ptr<T> p; ---> T * p; : nothing is constconst shared_ptr<T> p; ---> T * const p; : p is constshared_ptr<const T> p; ---> const T * p; <=> T const * p; : *p is constconst shared_ptr<const T> p; ---> const T * const p; <=> T const * const p; : p and *p are const.
The same holds for weak_ptr
and unique_ptr
.
0 0
- linux使用shared_ptr出现错误
- shared_ptr使用
- shared_ptr使用
- 使用 shared_ptr
- linux编译出现错误
- mac使用xterm远程连接Linux图形界面出现错误
- 使用kail-linux出现文件系统有错误,需要手动修复
- 使用mysql出现错误
- _bstr_t 使用出现错误
- 智能指针tr1::shared_ptr、boost::shared_ptr使用
- shared_ptr的使用心得
- shared_ptr使用注意事项
- shared_ptr使用,构建list
- boost::shared_ptr使用技巧
- 使用shared_ptr实例
- 使用 shared_ptr 的一個問題代碼
- linux 编译出现的错误
- Linux下挂载出现的错误
- xheditor编辑器
- iOS 7系列译文:认识 TextKit
- spring mvc url映射
- 杭电 2084 数塔
- 开启win7中服务窗口的三种方法
- linux使用shared_ptr出现错误
- java 生产者消费者问题
- 二维数组和指针
- Codeforces Round #241 (Div. 2) A
- 在Windows Server 2008服务器上安装SQL Server 2008 R2
- R Programming -- basic R expressions
- zookeeper学习记录
- STL学习中。。。
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程