1. 程式人生 > >c++設計一個簡單的空間配置器

c++設計一個簡單的空間配置器

#include <iostream>
template<typename T>
inline T* _allocate(unsigned int size,T*){//size
    T *temp=static_cast<T*>(operator new((size_t)size * sizeof(T)));
    if(temp==NULL){
        std::cout<<"out of memory"<<endl;
        exit(1);
    }
    return temp;
}

template<typename T>
inline void _deallocate(T* buffer){
    operator delete(buffer);
}

template<typename T1,typename T2>
inline void _construct(T1 *p,const T2& value){//p指向的分配的記憶體 value為構造的值
    new(p) T1(value);//在p指向的記憶體空間建立一個型別為T1的物件 呼叫T的建構函式接受const T2&型別的value
}

template<typename T>
inline void _destroy(T* ptr){
    ptr->~T();
}

template<typename T>
class myallocator{
puclic:
    typedef T value_type;
    typedef T* pointer;
    typedef const T* const_pointer;
    typedef T& reference;
    typedef const T& const_reference;
    typedef unsigned int size_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 buffer){
        _deallocate(buffer);
    }

    void construct(pointer p,const T& value){
        _construct(p,value);
    }

    void destroy(pointer p){
        _destroy(p);
    }

};

相關推薦

c++設計一個簡單空間配置

#include <iostream> template<typename T> inline T* _allocate(unsigned int size,T*){//size     T *temp=static_cast<T*>(op

C++ STL學習之 空間配置(allocator)

標籤(空格分隔): C++ STL 眾所周知,一般情況下,一個程式包括資料結構和相應的演算法,而資料結構作為儲存資料的組織形式,與記憶體空間有著密切的聯絡. 在C++ STL中,空間配置器便是用來實現記憶體空間(一般是記憶體,也可以是硬碟等空間)分配的工具,他與容器聯絡緊密,每一種容器的空間分配都是通過空

設計一個簡單空間配置 JJ::allocator

#ifndef _JJALLOC_ #define _JJALLOC_ #include<new>//for placement new #include<cstdlib>//for ptrdiff_t,size_t #include&

C++ 空間配置(allocator)

name 碎片 inux set 特性 改變 ptr comm 二級 C++ 空間配置器(allocator) 在STL中,Memory Allocator 處於最底層的位置,為一切的 Container 提供存儲服務,是一切其他組件的基石。對於一般使用 STL 的用戶

C++標準庫——STL之空間配置

但是 chunk 內容 既然 部分 如何 標識 stl源碼 strong 聲明:源碼同《STL源碼剖析》(侯捷) STL:   C++標準的模板庫,通用性高。   常見的數據結構封裝。   提供常用的通用算法。 STL六大組件:   容器 算法 叠

[C++] 空間配置——allocator類

  1、new和delete有一些靈活性上的侷限:new把記憶體分配和物件構造組合在了一起;delete將物件析構和記憶體釋放組合在了一起。   2、當分配一大塊記憶體時,我們通常計劃在這塊記憶體上按需構造物件,在此情況下,我們希望 將記憶體分配和物件構造分離;這意

c++設計一個一元稀疏多項式簡單計算器

#include <iostream> using namespace std; struct Node { float coef; int expn; Node *next; }; void Copy(Node *&pc, Node *

在VS2015下配置websocket++,並用C++搭建一個簡單的客戶端

簡介 最近在做一個專案,需要在C++中通過WebSocket和伺服器進行通訊,但我們在C++中並不能直接使用WebSocket,於是上網搜尋後發現websocket++這個庫很合適。 Websocket是基於HTTP協議的,或者說借用了HTTP的協議來完成一

[C++]STL-空間配置(一)

空間配置器 從STL的實現來說,首先需要明白的就是空間配置器,因為整個STL的操作物件都放在容器中,而容器需要一定配置空間以置放資料。 空間配置器的標準介面 // 標準介面,一些typedef allocator::value_typ

C++STL 空間配置allocator

先來介紹一下STL的六大元件1. 空間配置器:記憶體池實現小塊記憶體分配,對應到設計模式--單例模式(工具類,提供服務,一個程式只需要一個空間配置器即可),享元模式(小塊記憶體統一由記憶體池進行管理)2.迭代器:迭代器模式,模板方法3.容器:STL的核心之一,其他元件圍繞容器

初遇C#:一個簡單的小程序(圓形周長,面積計算器)

編碼 雙精度 崩潰 輸入 面向對象 窗口 語句 readline 面向對象的語言 作為一個面向對象的語言,與用戶的交互很關鍵! 在此,我們可以先分析一下我們這個小程序要與用戶交互的內容:1.命名很重要,讓用戶看見這個程序就知道這個程序的作用。 2.當用戶打開這個程序時,提示

C++設計一個不能被繼承的類(轉)

它的 設計 指定 基於 構造 重寫 rtu 構造函數、析構函數 析構函數 在Java 中定義了關鍵字final,被final修飾的類不能被繼承。 首先想到的是在C++中,子類的構造函數會自動調用父類的構造函數。同樣,子類的析構函數也會自動調用父類的析構函數。要想一個類不能

C#設計模式——簡單工廠模式

turn static 現在 rri 介紹 return 天都 土豆 增加 一、引言   這個系列也是自己對設計模式的一些學習筆記,希望對一些初學設計模式的人有所幫助的,在上一個專題中介紹了單例模式,在這個專題中繼續為大家介紹一個比較容易理解的模式——簡單工廠模式。 二、簡

Python學習-一個簡單的計時

pos var ota mar split dcl turn data 代碼 在實際開發中,往往想要計算一段代碼執行多長時間,以下我將該功能寫入到一個函數裏面,僅僅要在每一個函數前面調用該函數就可以,見以下代碼: #----------------

如何用Java編寫一個簡單的服務和客戶機

exce 解決 對賬 location exceptio acc 明顯 隊列 客戶 今天我要向大家介紹的是自己編寫的一個比較簡單的服務器和客戶機程序,註意一下哦,比較簡單。好了,閑話休提,砸門直入主題。 小編先從客戶機和服務器的模型開始講解。

C# 實現一個簡單的 Rest Service 供外部調用

message [] operation rem adk www span method title 用 C# 實現一個簡單的 Restful Service 供外部調用,大體總結為4點: The service contract (the methods it o

一個簡單配置文件和日誌管理(shell)

客戶端 數據 時間 r+ socket編程 har stdout scan 語言 最近在做一個Linux系統方案的設計,寫了一個之前升級服務程序的配置和日誌管理。 共4個文件,服務端一個UpdateServer.conf配置文件和一個UpdateServer腳本,客戶端一個

c語言實現簡單web服務

tps gate choices found lte expect inf tro condition 1http簡單介紹http超文本傳輸協議:host主機地址:port端口/urlhost會被DNS服務器 解析成IP地址,所以有時候可以直接用域名,http默認訪問80端

使用redis設計一個簡單的分布式鎖

睡眠狀態 環境 是否 lease 驗證 pri 嘗試 lee 功能 最近看了有關redis的一些東西,了解了redis的一下命令,就記錄一下: redis中的setnx命令: 關於redis的操作命令,我們一般會使用set,get等一系列操作,數據結構也有很多,這裏我們使用

C#做一個簡單的進行串口通信的上位機

時序 網上 fun style 什麽 函數 數值 pos 表示 C#做一個簡單的進行串口通信的上位機 1、上位機與下位機 上位機相當於一個軟件系統,可以用於接收數據、控制數據。即可以對接收到的數據直接發送操控命令來操作數據。上位機可以接收下位機的信號。下位機是一個