c语言内存管理线程,C++实现一个完整的内存管理工具(线程,内存池,萃取)...

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

//让我们开始一个完整的内存管理工具的实现吧。

///准备做一个完整的内存管理工具

//涉及线程,内存池,萃取,不仅仅是new跟delete的重载(或者说是函数重载),这是我的一个雏形,大家谁有什么好的指正谢谢提出,一起学习。

#include

#include

#include

#include

#include

#include

using namespace std;

class String

{ public:

String():ptr(new char[1])

{

cout<

ptr[0]='\0';

}

~String()

{

if(ptr){

delete ptr;

ptr = NULL;

}

}

String(const char *p):ptr(new char[strlen(p)+1])

{

strcpy(ptr,p);

}

void Printf()

{

cout<

cout<

}

String(const String& s):ptr(new char[strlen(s.ptr)+1])

{

strcpy(ptr,s.ptr);

}

String& operator = (const String &s)

{

if(this!=&s)

{

if(ptr)delete []ptr;

ptr = (char *)malloc(strlen(s.ptr)+1);

strcpy(ptr,s.ptr);

}

}

char& operator [](int size)

{

return ptr[size];

}

private:

char *ptr;

};

///测试类

struct Node

{

void *_P;

size_t _Line;

char *_Filename;

size_t _Size;

Node(void *q = NULL,size_t len = size_t(),\

const char *name="",int d=int()):_P(q),\

_Line(len),_Filename(new char[strlen(name)+1]),_Size(d)

{

strcpy(_Filename,name);

}

};

#define ALLOC(size,type) (_ALLOC(size,__FILE__,__LINE__,type()))

//type是传进来的一个类型,

list mlist;//调用stl的一个链表保存.

ostream& operator <

{

cout<

cout<

cout<

cout<

}

///

struct _false{};

struct _true{};//萃取.

template//范化

class triast

{

public:

typedef _false _ISPOD_ ;

};

template<>

class triast//特化

{

public:

typedef _true _ISPOD_;

};

template<>//特化。

class triast

{

public:

typedef _true _ISPOD_;

};

//

//相当与STL里面的萃取,别急,这只是我的一个雏形。

template

class Traist

{

public:

typedef type _type_;

};

template

static void traits(type &val)

{

typedef typename Traist :: _type_ _TYPE_;

*val="123";

val->Printf();

}//类型萃取,我的目的是当我传入参数的时候,不需要传递它的类型。。

/

template

static void* _ALLOC(int size,const char *_file_,int _line_,_true,type s1)

{ //不需要调用构造函数的赖皮空间的方式如int *,char *

void *p = malloc(size);

Node node(p,size,_file_,_line_);

mlist.push_back(node);

return p;

}

template

static void* _ALLOC(int size,_false,type s1)

{

//需要调用构造函数的靠皮空间的方式如:String s();

void *p = malloc(size);

Node node(p,_line_);

mlist.push_back(node);

new(p)type();

return p;

}

template

static void* _ALLOC(int size,type s1)

{

typedef typename triast :: _ISPOD_ ispod;

_ALLOC(size,_line_,ispod(),s1);

}

static void Printf()

{

list :: iterator it;

it = mlist.begin();

while(it!=mlist.end())

{

cout<

++it;

}

}

static void DELETE(void *p)//这里就需要类型萃取,自动判别P的类型,看是否需要调用构造函数。

{

list::iterator it;

it = mlist.begin();

while(1)

{

if(it->_P==p){

mlist.erase(it);

break;

}

it++;

}

}

int main()

{

String *s = (String *)ALLOC(sizeof(String),String);

//int *a = (int *)ALLOC(sizeof(int),int);

// DELETE(a);

// Printf();

traits(s);//萃取测试.

return 0;

}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值