在C++中,可以通过重载"new"和"delete"运算符来捕捉和跟踪内存分配和释放。以下是一个示例代码:
#include
#include
// 重载new和delete运算符
void* operator new(std::size_t size) {
std::cout << "Allocating " << size << " bytes of memory" << std::endl;
void* ptr = std::malloc(size);
if (ptr == nullptr) {
throw std::bad_alloc();
}
return ptr;
}
void operator delete(void* ptr) noexcept {
std::cout << "Deallocating memory" << std::endl;
std::free(ptr);
}
// 示例代码
int main() {
int* num = new int(5);
delete num;
return 0;
}
在上面的代码中,我们重载了"new"和"delete"运算符,并在其中添加了打印语句来跟踪内存的分配和释放过程。当我们使用"new"运算符分配内存时,会打印相关信息,当我们使用"delete"运算符释放内存时,也会打印相关信息。
通过使用这些重载的运算符,我们可以在程序运行时捕捉到从库中可能发生的内存泄漏。