怎么实现一个重载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
...全文
332 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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 参考这个

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧