STL源码剖析中allocator类运行在vs2010上
来源:互联网 发布:java开发必备 编辑:程序博客网 时间:2024/05/16 18:41
《STL源码剖析》第二章的代码敲了一遍(Linux运行正常),在windows上出现以下错误:
d:\program files\microsoft visual studio 10.0\vc\include\vector(454): error C2664: 'JJ::allocator<T>::allocator(const JJ::allocator<T> &)' : cannot convert parameter 1 from 'JJ::allocator<T>' to 'const JJ::allocator<T> &'
1> with
1> [
1> T=std::_Container_proxy
1> ]
1> and
1> [
1> T=int
1> ]
1> and
1> [
1> T=std::_Container_proxy
1> ]
1> Reason: cannot convert from 'JJ::allocator<T>' to 'const JJ::allocator<T>'
1> with
1> [
1> T=int
1> ]
1> and
1> [
1> T=std::_Container_proxy
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1> d:\program files\microsoft visual studio 10.0\vc\include\vector(452) : while compiling class template member function 'std::_Vector_val<_Ty,_Alloc>::~_Vector_val(void)'
1> with
1> [
1> _Ty=int,
1> _Alloc=JJ::allocator<int>
1> ]
1> d:\program files\microsoft visual studio 10.0\vc\include\vector(481) : see reference to class template instantiation 'std::_Vector_val<_Ty,_Alloc>' being compiled
1> with
1> [
1> _Ty=int,
1> _Alloc=JJ::allocator<int>
1> ]
1> e:\快盘\炸金花\程序\stl\stl\allocator.cpp(11) : see reference to class template instantiation 'std::vector<_Ty,_Ax>' being compiled
1> with
1> [
1> _Ty=int,
1> _Ax=JJ::allocator<int>
1> ]
1>
1>Build FAILED.
原因是,windows的编译器用到了allocator不同类型的拷贝,所以只需写上拷贝构造函数就可以。
#pragma once#include<cstddef>namespace JJ{template<class T>inline T* _allocate(ptrdiff_t size , T*){set_new_handler(0);T *tmp = (T *)(::operator new ((size_t)(size*sizeof(T))));if(tmp==0){//cerr<"out of memory"<<endl;exit(1);}return tmp;}template<class T>inline void _deallocate(T *buffer){::operator delete(buffer);}template<class T1,class T2>inline void _construct(T1 *p,const T2& value){new(p) T1(value);}template <class T>inline void _destory(T *ptr){ptr->~T();}template <class T>class allocator{public:typedef T value_type;typedef T* pointer;typedef const T* const_pointer;typedef T& reference;typedef const T& const_reference;typedef size_t size_type;typedef ptrdiff_t difference_type;template <class U>struct rebind{typedef allocator<U> other;};allocator(){return ;}template <class U>allocator(const allocator<U>& c ){}pointer allocate(size_type n,const void *hint=0){cout<<n<<endl;return _allocate((difference_type)n,(pointer)0);}void deallocate(pointer p,size_type n){_deallocate(p);}void construct(pointer p,const T& value){_construct(p,value);}void destroy(pointer p){_destory(p);}pointer address(reference x){return (pointer)&x;}const_pointer const_address(const_reference x){return (const_pointer)&x;}size_type max_size() const{return size_type(0xffffffff/sizeof(T));//return size_type(0);}};}
- STL源码剖析中allocator类运行在vs2010上
- STL源码剖析在VS2010下运行出错
- STL源码剖析01-allocator
- STL 源码剖析allocator 深入(五)
- STL源码剖析之一:空间适配器(allocator)
- stl源码剖析读书笔记之allocator
- STL中allocator类
- SGI STL 空间配置器(allocator)源码剖析
- 《STL源码剖析》之配置自己简单的allocator
- SGI STL 空间配置器(allocator)源码剖析
- STL源码剖析之空间配置器Allocator
- STL源码剖析 — 空间配置器(allocator)
- [STL]源码分析:allocator
- STL源码阅读-allocator
- stl allocator源码学习
- STL源码---allocator配置器
- STL中Sort()源码剖析
- 《STL源码剖析》读书笔记--第二章 空间配置器(allocator)
- cocos2d-x 动画缓存CCAnimationCache
- Https核心加密算法-Diffie–Hellman key exchange
- Eclipse使用jconsole监视
- javascript-按圆形排列DIV元素(一)---- 分析
- FreeBSD 命令记录
- STL源码剖析中allocator类运行在vs2010上
- 百度地图新手教程2
- 数据库名,数据库实例名,数据库服务名,数据库域名,ORACLE_SID
- Oracle回收站(Recycle Bin)
- Spring+Quartz实现动态添加定时任务
- UVA - 10057 (中位数的运用)
- dojo DataGrid使用二
- 黑马程序员_集合简单入门详解
- 百度地图新手教程3