根据allocator的标准接口,编写的功能、接口不齐全的allocator

本文介绍了一个简单的自定义内存分配器实现,包括分配、构造、销毁和释放内存等核心功能,并展示了如何通过模板元编程来适配STL容器的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef MYALLOC_H
#define MYALLOC_H

#include<new>//for placement new
#include<cstddef>//for ptrdiff_t size_t
#include<cstdlib>//for exit
#include<climits>//for unit_Max
#include<iostream>

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(NULL == tmp){
			cout<<"out of memory"<<endl;
			exit(1);
		}
		return tmp;
	}

	template<class T>
	inline void _deallocate(T* buf)
	{
		::operator delete(buf);
	}

	template<class T1,class T2>
	inline void _construct(T1 *p,const T2& value)
	{
		new(p)T1(value);
	}

	template<class T>
	inline void _destroy(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;
		};
	    
		pointer allocate(size_type n,const void* hint=0)
		{
			return _allocate(difference_type(n),(pointer)0);
		}

		void deallocate(pointer ptr,size_type n)
		{
			_deallocate(ptr);
		}

		void construct(pointer ptr,const T& t)
		{
			_construct(ptr,t);	
		};

		void distroy(pointer ptr)
		{
			_destroy(ptr);
		}

		pointer address(reference x)
		{
			return (pointer)&x;
		}

		const_pointer const_address(reference x)const
		{
			return (const_pointer)&x;
		}

		size_type max_size() const
		{
			return size_type(UINT_MAX/sizeof(T));
		}
	};

};

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值