请让我知道我是否可以做到?
我正在编写一个库,该库可以用来跟踪C++中的内存分配和取消分配。简而言之,我试图查看我的应用程序是否没有任何内存泄漏。这是我到目前为止所做的。
现在覆盖new和delete运算符。每当应用程序使用new时,我都计划存储该调用中分配的地址和字节数。同样,当在该地址上调用删除时,我将从存储的列表中删除它。到现在为止还不错。但是我想存储文件名和行号,从那里被称为"new"。我只能在被覆盖的新代码中这样做。有没有办法在重写函数中获得行号?
1 int main()
2 {
3 // Say, A is a structure
4 A *a = new A();
5 return 0;
6 }
7 void* operator new( size )
8 {
9 //
10 // store the line number and file name on line 4 ??? Can I do it?
11 return (malloc(size));
12 }
------------------------
最佳答案
从C++ 20开始,您可以使用std::source_location
提供:
对于以前的C++版本,传统上宏
__LINE__
给出行号,但是__FUNCTION__
和__FILE__
确实很有用,给出了封装函数的const char *和文件名。实际上,
__FUNCTION__
不是标准的,但几个编译器都支持。不幸的是,这些宏仅发挥其值(value)。
因此,您不可能要求 call 者。
您应该在所有使用
__LINE__
的地方编写__FILE__
和new
宏。 :(。关于c++ - 获取被调用函数的行号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4452557/