写一个C++ 重载new操作符的示例
时间: 2023-05-11 19:05:54 浏览: 112
当我们在C++中创建一个对象时,new操作符会自动调用构造函数来初始化对象。如果我们想要在对象创建时执行一些额外的操作,我们可以重载new操作符。下面是一个示例:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "MyClass constructor called" << endl;
}
void* operator new(size_t size) {
cout << "Custom new operator called" << endl;
void* p = malloc(size);
return p;
}
void operator delete(void* p) {
cout << "Custom delete operator called" << endl;
free(p);
}
};
int main() {
MyClass* obj = new MyClass();
delete obj;
return 0;
}
```
在这个示例中,我们定义了一个名为MyClass的类,并重载了new和delete操作符。在new操作符中,我们打印了一条自定义消息,并使用malloc函数分配了内存。在delete操作符中,我们打印了另一条自定义消息,并使用free函数释放了内存。
当我们在main函数中创建一个MyClass对象时,new操作符会调用我们自定义的new操作符,打印一条消息并分配内存。当我们删除对象时,delete操作符会调用我们自定义的delete操作符,打印另一条消息并释放内存。
输出结果如下:
```
Custom new operator called
MyClass constructor called
Custom delete operator called
```
这个示例演示了如何重载new操作符来执行自定义操作。
阅读全文