在 C++ 中,您可以通过重载 operator new
和 operator delete
函数来自定义 new
操作符的行为。这些操作符用于分配和释放内存。
下面是一个简单的示例,展示了如何重载 operator new
和 operator delete
以跟踪内存分配:
#include<iostream>
#include <cstdlib> // for std::size_t
// 自定义 operator new
void* operator new(std::size_t size) {
std::cout << "Custom new: allocating "<< size << " bytes"<< std::endl;
void* ptr = std::malloc(size);
if (ptr == nullptr) {
throw std::bad_alloc();
}
return ptr;
}
// 自定义 operator delete
void operator delete(void* ptr) noexcept {
std::cout << "Custom delete: freeing memory at "<< ptr<< std::endl;
std::free(ptr);
}
class MyClass {
public:
MyClass() {
std::cout << "MyClass constructor"<< std::endl;
}
~MyClass() {
std::cout << "MyClass destructor"<< std::endl;
}
};
int main() {
try {
MyClass* obj = new MyClass();
delete obj;
} catch (const std::bad_alloc& e) {
std::cerr << "Allocation failed: " << e.what()<< std::endl;
}
return 0;
}
在这个示例中,我们重载了全局的 operator new
和 operator delete
函数。当使用 new
关键字创建对象时,将调用自定义的 operator new
函数。同样,当使用 delete
关键字删除对象时,将调用自定义的 operator delete
函数。
请注意,这只是一个简单的示例,实际上您可能需要处理更复杂的情况,例如重载 operator new[]
和 operator delete[]
以支持数组分配,或者为特定类型的对象提供不同的内存管理策略。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1133240.html