怎么实现一个重载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
...全文
281 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2017-11-24 05:31
社区公告
暂无公告