虚拟运营商新增/删除了什么?

问题描述 投票:0回答:1

最近,我用

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 构建的。

c++ llvm reverse-engineering pdb pdb-files
1个回答
0
投票

这实际上是delete和new运算符的重载,你可以在C++中做到这一点。您可以在这里阅读更多相关信息:https://en.cppreference.com/w/cpp/memory/new/operator_new。 virtual 后的“ =0 ”表示该类是抽象类,您无法创建它(C++ virtual = 0; 和空函数之间的区别

© www.soinside.com 2019 - 2024. All rights reserved.