最近,我用
llvm-pdbutil pretty --classes
反汇编了一些DLL&PDB。但我没有这个DLL的源代码。
在输出中,我在类体中发现了一些表达式,主要是我不熟悉的虚拟运算符new/delete的声明。例如,在2堂课中,我发现
// class 1
virtual void *operator new() = 0;
virtual void operator delete() = 0;
// class 2
virtual void *operator new(unsigned __int64 Size) = 0;
virtual void operator delete(void *result) = 0;
我不知道这些是什么以及它们对应的 C++ 代码是什么,有人可以告诉我更多关于它们的信息吗?
我尝试将它们直接复制并粘贴到 IDE 中,但 linting 显示“只有非静态成员函数可能是虚拟的”;如果我删除“虚拟”,我会得到“仅在虚拟函数上允许纯说明符('= 0')”。所以编译不会成功。
我确信该 DLL 是在 x86_64 机器上使用 VS 2019、msvc 构建的。
这实际上是delete和new运算符的重载,你可以在C++中做到这一点。您可以在这里阅读更多相关信息:https://en.cppreference.com/w/cpp/memory/new/operator_new。 virtual 后的“ =0 ”表示该类是抽象类,您无法创建它(C++ virtual = 0; 和空函数之间的区别)