怎么实现一个重载new和delete的类

Mr. Code 2017-11-24 05:31:07
实现了一个自己的内存管理之后,想写一个类,里面重载new和delete,然后希望new的时候和调用自己重载的new函数,然后自动调用构造函数,delete的时候自动调用析构函数,并调用重载的delete。但是发现不会自动调用构造和析构:
// 类的定义
class test_mm
{
public:
test_mm();
~test_mm();

void *operator new(size_t size);
void operator delete(void *p);
};

// 类的实现如下:
test_mm::test_mm(){
printf("test_mm\n");
}


test_mm::~test_mm(){
printf("~test_mm\n");
}

void *test_mm::operator new(size_t size){
printf("test_mm new\n");
void * p = mm_malloc(size);
return p;
}

void test_mm::operator delete(void *p){
printf("test_mm delete\n");
mm_free(p);
}


// 执行new和delete之后
test_mm * t1 = new test_mm();
test_mm * t2 = new test_mm();
delete t1;
delete t2;


打印为:
test_mm new
test_mm new

未调用构造函数;
也未调用析构函数和delete
...全文
165 点赞 收藏 4
写回复
4 条回复
Mr. Code 2017年11月25日
引用 2 楼 KenZhang1031 的回复:
[quote=引用 1 楼 xiaohuh421 的回复:] http://www.cocoachina.com/bbs/read.php?tid-319865-page-e.html 参考这个
我要的不是管理内存的代码。 管理内存的程序已经写好了,我是要重载一个类的new和delete之后,new一个对象的时候自动调用构造函数,delete的时候自动调用析构函数[/quote] 很好,解决问题。
回复 点赞
大尾巴猫 2017年11月24日
可以用placement new来实现在特定的内存中创建对象,满足内存池这样的需求,一般不需要重载new 和delete吧
回复 点赞
Mr. Code 2017年11月24日
引用 1 楼 xiaohuh421 的回复:
http://www.cocoachina.com/bbs/read.php?tid-319865-page-e.html 参考这个
我要的不是管理内存的代码。 管理内存的程序已经写好了,我是要重载一个类的new和delete之后,new一个对象的时候自动调用构造函数,delete的时候自动调用析构函数
回复 点赞
xiaohuh421 2017年11月24日
http://www.cocoachina.com/bbs/read.php?tid-319865-page-e.html 参考这个
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告