diff --git a/src/arch/mips/isa/formats/branch.isa b/src/arch/mips/isa/formats/branch.isa index 09bab47495..963d31d772 100644 --- a/src/arch/mips/isa/formats/branch.isa +++ b/src/arch/mips/isa/formats/branch.isa @@ -153,14 +153,11 @@ output decoder {{ PCDependentDisassembly::disassemble( Addr pc, const Loader::SymbolTable *symtab) const { - if (!cachedDisassembly || - pc != cachedPC || symtab != cachedSymtab) - { - if (cachedDisassembly) - delete cachedDisassembly; + if (!cachedDisassembly || pc != cachedPC || symtab != cachedSymtab) { + if (!cachedDisassembly) + cachedDisassembly.reset(new std::string); - cachedDisassembly = - new std::string(generateDisassembly(pc, symtab)); + *cachedDisassembly = generateDisassembly(pc, symtab); cachedPC = pc; cachedSymtab = symtab; } diff --git a/src/arch/power/insts/branch.cc b/src/arch/power/insts/branch.cc index 72e4412a84..84834f1ed6 100644 --- a/src/arch/power/insts/branch.cc +++ b/src/arch/power/insts/branch.cc @@ -37,14 +37,11 @@ const std::string & PCDependentDisassembly::disassemble( Addr pc, const Loader::SymbolTable *symtab) const { - if (!cachedDisassembly || - pc != cachedPC || symtab != cachedSymtab) - { - if (cachedDisassembly) - delete cachedDisassembly; + if (!cachedDisassembly || pc != cachedPC || symtab != cachedSymtab) { + if (!cachedDisassembly) + cachedDisassembly.reset(new std::string); - cachedDisassembly = - new std::string(generateDisassembly(pc, symtab)); + *cachedDisassembly = generateDisassembly(pc, symtab); cachedPC = pc; cachedSymtab = symtab; } diff --git a/src/cpu/static_inst.cc b/src/cpu/static_inst.cc index 05cd36067a..c42b1d24b5 100644 --- a/src/cpu/static_inst.cc +++ b/src/cpu/static_inst.cc @@ -64,12 +64,6 @@ class NopStaticInst : public StaticInst StaticInstPtr StaticInst::nullStaticInstPtr; StaticInstPtr StaticInst::nopStaticInstPtr = new NopStaticInst; -StaticInst::~StaticInst() -{ - if (cachedDisassembly) - delete cachedDisassembly; -} - bool StaticInst::hasBranchTarget(const TheISA::PCState &pc, ThreadContext *tc, TheISA::PCState &tgt) const @@ -111,8 +105,10 @@ StaticInst::branchTarget(ThreadContext *tc) const const std::string & StaticInst::disassemble(Addr pc, const Loader::SymbolTable *symtab) const { - if (!cachedDisassembly) - cachedDisassembly = new std::string(generateDisassembly(pc, symtab)); + if (!cachedDisassembly) { + cachedDisassembly = + std::make_unique(generateDisassembly(pc, symtab)); + } return *cachedDisassembly; } diff --git a/src/cpu/static_inst.hh b/src/cpu/static_inst.hh index ebc5529f36..20411e7250 100644 --- a/src/cpu/static_inst.hh +++ b/src/cpu/static_inst.hh @@ -283,7 +283,7 @@ class StaticInst : public RefCounted, public StaticInstFlags * String representation of disassembly (lazily evaluated via * disassemble()). */ - mutable std::string *cachedDisassembly = nullptr; + mutable std::unique_ptr cachedDisassembly; /** * Internal function to generate disassembly string. @@ -301,7 +301,7 @@ class StaticInst : public RefCounted, public StaticInstFlags {} public: - virtual ~StaticInst(); + virtual ~StaticInst() {}; virtual Fault execute(ExecContext *xc, Trace::InstRecord *traceData) const = 0;