设计一个简单的空间配置器, JJ::allocator
2013-06-09 15:23
459 查看
// Test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <new>
#include <cstddef>
#include <cstdlib>
#include <climits>
#include <iostream>
#include <vector>
using namespace std;
namespace JJ
{
template <typename 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 <typename T>
inline void _deallocate(T* buffer)
{
::operator delete(buffer);
}
template <typename T1,typename T2>
inline void _construct(T1* p,const T2& value)
{
new(p) T1(value);
}
template <typename T>
inline void _destroy(T* ptr)
{
ptr->T();
}
template <typename 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<typename U>
struct rebind
{
typedef allocator<U> other;
};
pointer allocate(size_type n, const void *hint=0)
{
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)
{
_destroy(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(UINT_MAX/sizeof(T));
}
};
}
int main()
{
int ia[5] = {0,1,2,3,4};
unsigned int i;
vector<int,JJ::allocator<int>> ivv(ia,ia+5);
vector<int,std::allocator<int> > iv(ia,ia+5);
for(i = 0; i < iv.size(); ++i)
std::cout << iv[i] << " ";
cout << endl;
system("pause");
return 0;
}
//
#include "stdafx.h"
#include <new>
#include <cstddef>
#include <cstdlib>
#include <climits>
#include <iostream>
#include <vector>
using namespace std;
namespace JJ
{
template <typename 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 <typename T>
inline void _deallocate(T* buffer)
{
::operator delete(buffer);
}
template <typename T1,typename T2>
inline void _construct(T1* p,const T2& value)
{
new(p) T1(value);
}
template <typename T>
inline void _destroy(T* ptr)
{
ptr->T();
}
template <typename 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<typename U>
struct rebind
{
typedef allocator<U> other;
};
pointer allocate(size_type n, const void *hint=0)
{
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)
{
_destroy(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(UINT_MAX/sizeof(T));
}
};
}
int main()
{
int ia[5] = {0,1,2,3,4};
unsigned int i;
vector<int,JJ::allocator<int>> ivv(ia,ia+5);
vector<int,std::allocator<int> > iv(ia,ia+5);
for(i = 0; i < iv.size(); ++i)
std::cout << iv[i] << " ";
cout << endl;
system("pause");
return 0;
}
相关文章推荐
- 设计一个简单的空间配置器 JJ::allocator
- 设计一个简单的空间配置器 JJ::allocator
- STL中设计一个简单的空间配置器
- C++STL学习(12)STL深入(1) 设计简单的空间配置器
- STL中空间配置器(allocator)的简单实现
- c++实现一个简单的空间配置器allocator
- 一个WinForm程序配置信息的简单模型和维护工具——设计说明
- 一个简单的空间配置器
- 一个简单的空间配置器: allocator
- struts2的配置和一个简单的例子
- 用DOS写一个简单的虚拟WIFI工具,启动无线承载网络,自动配置实现共享
- 一个简单的任务执行引擎设计
- 一个简单的酒店系统的数据库设计
- 教你如何设计一个简单的猜数字游戏
- 【MyBatis】一个简单的xml配置文件;
- 一个简单的通讯录的设计(Phone Book Architecture Overview)
- 一个主域名服务器DNS快速简单的配置方法
- 仅使用Redis+PHP设计实现一个简单的Twitter
- [ASP.NET 设计模式] 用Visual Studio2010搭建一个简单的WCF分层结构示例Step by Step —— 02 Model的建立
- [综合] 一个简单图形界面框架XYGui的设计与实现 (二)