如何能通过重载new,打印申请内存时的文件名称和行号
时间: 2023-11-22 16:53:53 浏览: 29
可以通过重载new操作符来实现打印申请内存时的文件名称和行号。具体实现方法如下:
1.定义一个自定义的new操作符,重载该操作符,以便能够接收文件名称和行号的参数。
```c++
void* operator new(size_t size, const char* file, int line) {
void* ptr = malloc(size);
cout << "Allocating " << size << " bytes in " << file << " at line " << line << endl;
return ptr;
}
```
2.为了确保不影响应用程序的其他部分,可以使用一个宏来替代所有的new操作符。这个宏将会在每个new操作符调用时,传递当前的文件名称和行号。
```c++
#define new new(__FILE__, __LINE__)
```
这样,在每个new操作符调用时,就会传递当前的文件名称和行号,从而能够打印出相应的信息。
完整的代码示例如下:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
void* operator new(size_t size, const char* file, int line) {
void* ptr = malloc(size);
cout << "Allocating " << size << " bytes in " << file << " at line " << line << endl;
return ptr;
}
#define new new(__FILE__, __LINE__)
int main() {
int* p = new int;
delete p;
return 0;
}
```
输出结果:
```
Allocating 4 bytes in main.cpp at line 14
```