operator new重载
时间: 2023-10-14 13:27:48 浏览: 145
operator new在C++中的各种写法总结
在C++中,`new`运算符用于在堆上动态分配内存。我们可以通过重载`operator new`来自定义内存分配方式。
`operator new`是一个静态成员函数,可以作为类的成员函数或全局函数进行定义。其原型如下:
```cpp
void* operator new(size_t size);
```
其中,`size`表示需要分配的内存大小,返回值为一个指向分配内存的指针。
以下是一个自定义`operator new`的示例:
```cpp
class MyClass {
public:
void* operator new(size_t size) {
std::cout << "Allocating " << size << " bytes\n";
void* p = std::malloc(size);
if (!p) throw std::bad_alloc();
return p;
}
void operator delete(void* p) noexcept {
std::cout << "Deallocating memory\n";
std::free(p);
}
};
int main() {
MyClass* p = new MyClass;
delete p;
return 0;
}
```
在上面的示例中,我们重载了`operator new`和`operator delete`函数,用`std::malloc`和`std::free`函数分别实现了内存的分配和释放,并在控制台输出相应信息。
阅读全文