我正在编写一个基于clang前端的工具。
这是我对DiagnosticConsumer
和FrontendAction的替代。
运行此操作会导致段错误。如果我只是从FrontendAction中删除delete BDCProto;
,它就不会导致段错误
我糊涂了。为什么我不能删除我在类dtor中的类中创建的对象?我并不喜欢这些范围。没有人试图在dtor之后使用那个指针,对吧?
我做错了什么?
class BlankDiagConsumer : public clang::DiagnosticConsumer
{
BlankDiagConsumer() = default;
virtual ~BlankDiagConsumer();
virtual void HandleDiagnostic(DiagnosticsEngine::Level, const Diagnostic &Info) override {}
};
class LiveActionListVars : public ASTFrontendAction
{
public:
LiveActionListVars() {}
~LiveActionListVars()
{
delete BDCProto;
}
void EndSourceFileAction() override {}
std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, StringRef file) override
{
DiagnosticsEngine &DE = CI.getPreprocessor().getDiagnostics();
DE.setClient(BDCProto);
TheRewriter.setSourceMgr(CI.getSourceManager(), CI.getLangOpts());
return llvm::make_unique<LiveListVarsConsumer>(TheRewriter);
}
private:
Rewriter TheRewriter;
BlankDiagConsumer* BDCProto = new BlankDiagConsumer;
};