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

Mr. Code Mr. Code 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
实现了一个自己的内存管理之后,想写一个类,里面重载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
...全文

相关推荐

17~C++ new和delete运算符重载

重载 class A的new/delete 以及 new[]/delete[]运算符: 成功返回非空指针,失败返回空指针 #include #include using namespace std; class A { public: A (int var = 0) : m_var (var) { cout << A构造: << this << endl; } ~A (void) { cout << A析构: << this << endl; } static void* operator new (size_t size) { void* pv = malloc

weixin_38570406

C++ new、delete(new[]、delete[])操作符重载需要注意的问题

主要介绍了C++ new、delete(new[]、delete[])操作符重载需要注意的问题,本文同时讲解了兼容默认的 new、delete 的错误处理方式、多态的问题等内容,需要的朋友可以参考下

weixin_38629801

关于new和delete的详细用法

关于new和delete的详细用法。详细用法哟!new是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,

夏子貅

C++之CNoTrackObject类和new delete操作符的重载实例

主要介绍了C++之CNoTrackObject类和new delete操作符的重载实例,是C++程序设计中比较重要的概念,需要的朋友可以参考下

weixin_38538264

C++ new和delete详解[可运行源码]

本文详细介绍了C++中new和delete的使用方法及其与C语言中malloc和free的区别。new和delete是C++中的运算符,用于动态内存管理,不仅能够分配和释放内存,还能调用构造函数和析构函数进行初始化和资源清理。文章对比了malloc、calloc和realloc在C语言中的使用,并重点讲解了new和delete对内置类型和自定义类型的操作。此外,还介绍了operator new和operator delete的全局函数及其重载方法,以及定位new表达式的使用场景。最后,总结了malloc/free与new/delete的主要区别,强调了new/delete在面向对象编程中的优势。

ol789012
评论 4
收藏 已收藏
分享
返回顶部
Mr. Code
C++ 语言 65,214 成员 250,514 内容