如何实现new操作符
时间: 2024-02-19 18:03:37 浏览: 17
在 C++ 中,我们可以通过重载 `new` 和 `delete` 运算符来自定义内存的分配和释放过程,从而实现自己的 `new` 操作符。以下是一个简单的示例:
```c++
#include <iostream>
#include <cstdlib>
void* operator new(std::size_t size) {
std::cout << "Custom new operator called, size = " << size << std::endl;
void* p = std::malloc(size);
if (p == nullptr) {
throw std::bad_alloc();
}
return p;
}
void operator delete(void* p) noexcept {
std::cout << "Custom delete operator called" << std::endl;
std::free(p);
}
int main() {
int* p = new int;
*p = 10;
std::cout << *p << std::endl;
delete p;
return 0;
}
```
在上面的示例中,我们重载了 `new` 和 `delete` 运算符,使用 `std::malloc()` 函数和 `std::free()` 函数手动分配和释放内存。当我们使用 `new` 操作符创建一个 `int` 类型的对象时,会自动调用我们定义的 `new` 运算符,输出一条自定义的提示信息,并分配内存。当使用 `delete` 操作符释放内存时,也会自动调用我们定义的 `delete` 运算符,输出一条自定义的提示信息,并释放内存。
需要注意的是,我们在重载 `new` 和 `delete` 运算符时要遵守一些规则,比如 `new` 和 `delete` 运算符必须是全局函数,不能是成员函数,否则无法重载成功。此外,我们还应该遵循一些内存管理的最佳实践,如避免内存泄漏、避免重复释放等。