Skip to content
Snippets Groups Projects
Commit 96c36a7b authored by Scott Snyder's avatar Scott Snyder Committed by Adam Edward Barton
Browse files

MuPatPrimitives+MuonTrackSteeringTools: Lifetime management update

MuPatPrimitives: Lifetime management update

Have addToTrash return a (bare) pointer to the object just added.
Avoids having a pattern in the caller where it looks like a dangling
pointer is retained from a unique_ptr.
parent b95ae91c
No related branches found
No related tags found
No related merge requests found
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
*/
#ifndef MUPATCANDIDATEBASE_H
......@@ -114,7 +114,7 @@ namespace Muon {
bool shareChambers(const MuPatCandidateBase& entry) const;
/** @brief adds the measurement to the garbage container. */
void addToTrash(std::unique_ptr<const Trk::MeasurementBase> meas);
const Trk::MeasurementBase* addToTrash(std::unique_ptr<const Trk::MeasurementBase> meas);
void addToTrash(const std::vector<std::shared_ptr<const Trk::MeasurementBase>>& measurements);
const std::vector<std::shared_ptr<const Trk::MeasurementBase>>& garbage() const;
protected:
......
/*
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
*/
#include "MuPatPrimitives/MuPatCandidateBase.h"
......@@ -88,7 +88,12 @@ namespace Muon {
bool MuPatCandidateBase::hasMomentum() const { return m_hasMomentum; }
void MuPatCandidateBase::addToTrash(std::unique_ptr<const Trk::MeasurementBase> meas) {m_garbage.push_back(std::move(meas));}
const Trk::MeasurementBase*
MuPatCandidateBase::addToTrash(std::unique_ptr<const Trk::MeasurementBase> meas)
{
m_garbage.push_back(std::move(meas));
return m_garbage.back().get();
}
void MuPatCandidateBase::addToTrash(const std::vector<std::shared_ptr<const Trk::MeasurementBase>>& measurements) {
if (m_garbage.capacity() < measurements.size() + m_garbage.size()){
m_garbage.reserve(measurements.size() + m_garbage.size());
......
......@@ -153,8 +153,6 @@ namespace Muon {
fakePhiHits.push_back(meas);
continue;
}
std::unique_ptr<Trk::MeasurementBase> newRot{};
// skip ID hits
if (!m_idHelperSvc->isMuon(id)) continue;
......@@ -187,8 +185,9 @@ namespace Muon {
continue;
}
ATH_MSG_DEBUG(" recreating MdtDriftCircleOnTrack ");
newRot = std::unique_ptr<MdtDriftCircleOnTrack>{m_mdtRotCreator->createRIO_OnTrack(*mdt->prepRawData(), mdt->globalPosition())};
meas = newRot.get();
meas = entry.addToTrash
(std::unique_ptr<const MdtDriftCircleOnTrack>
(m_mdtRotCreator->createRIO_OnTrack(*mdt->prepRawData(), mdt->globalPosition())));
}
}
......@@ -225,8 +224,9 @@ namespace Muon {
continue;
}
ATH_MSG_DEBUG(" recreating CscClusterOnTrack ");
newRot = std::unique_ptr<MuonClusterOnTrack>{m_cscRotCreator->createRIO_OnTrack(*csc->prepRawData(), csc->globalPosition())};
meas = newRot.get();
meas = entry.addToTrash
(std::unique_ptr<const MuonClusterOnTrack>
(m_cscRotCreator->createRIO_OnTrack(*csc->prepRawData(), csc->globalPosition())));
}
......@@ -249,8 +249,6 @@ namespace Muon {
} else {
etaHits.push_back(meas);
}
// cppcheck-suppress nullPointerRedundantCheck; false positive
entry.addToTrash(std::move(newRot));
}
if (createComp) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment