用c++写一个new()的重载
时间: 2023-06-24 11:03:25 浏览: 68
在C++中,可以通过重载`operator new()`和`operator delete()`来自定义内存分配和释放的行为。下面是一个简单的示例:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "MyClass constructor called" << endl;
}
~MyClass() {
cout << "MyClass destructor called" << endl;
}
void* operator new(size_t size) {
cout << "Custom new operator called, size = " << size << endl;
return malloc(size);
}
void operator delete(void* ptr) {
cout << "Custom delete operator called" << endl;
free(ptr);
}
};
int main() {
MyClass* p = new MyClass();
delete p;
return 0;
}
```
在上面的示例中,`MyClass`类重载了`operator new()`和`operator delete()`。当使用`new`运算符创建`MyClass`对象时,会调用自定义的`new`函数,输出一条消息并返回一个由`malloc()`分配的指针。当使用`delete`运算符删除`MyClass`对象时,会调用自定义的`delete`函数,输出一条消息并释放由`malloc()`分配的内存。
注意,自定义的`new`函数必须返回一个指向合法内存的指针,否则会导致未定义行为。同时,建议在自定义的`new`函数中使用`malloc()`函数分配内存,而不是直接调用`new`运算符,避免递归调用自定义的`new`函数。
阅读全文