1

在 C++ 中,编译器应在诸如删除关键字/作用域结束等位置隐式插入对析构函数的调用。在 C++ 中,对析构函数的调用应在编译时固定(尽管被调用者可以在运行时使用 vtables 决定)。(上面说的对吗?)

但是在使用 Clang LibTooling 时的 Clang AST 转储中,没有对 AST 中的析构函数的隐式调用。为了比较,在 AST 中有隐式生成的默认构造函数和析构函数节点,即使它们不存在于扫描的源代码中。

对于delete关键字,AST中有一个CXXDeleteExpr节点,但不包含析构函数的CXXDestructorDecl,只包含要删除的对象的类型。

对于其他类型的析构函数调用,AST 中根本没有节点。

然后在 Clang LibTooling 中如何获取有关在哪些位置调用析构函数的信息?

4

0 回答 0