这种方法能针对类似new int[10]的场景吗
时间: 2023-11-29 20:04:42 浏览: 23
可以针对`new`和`new[]`操作符同时重载,代码如下所示:
```c++
void* operator new(size_t size, const char* file, int line) {
void* p = malloc(size);
std::cout << "File: " << file << ", Line: " << line << " -- ";
return p;
}
void* operator new[](size_t size, const char* file, int line) {
void* p = malloc(size);
std::cout << "File: " << file << ", Line: " << line << " -- ";
return p;
}
#define new new(__FILE__, __LINE__)
#define new[] new[](__FILE__, __LINE__)
int main() {
int* p = new int;
delete p;
int* q = new int[10];
delete[] q;
return 0;
}
```
在这个示例代码中,我们一共重载了两个new操作符和两个delete操作符。在使用new和new[]时都会打印出文件名和行号信息,方便调试使用。同时,我们也重载了delete和delete[]操作符,以确保内存的正常释放。
需要注意的是,由于在重载new时已经加入了文件名和行号信息,因此在使用new[]时就不需要再次添加宏定义了。